Я пишу запрос, в котором мне нужно получить данные только за последний год. Как лучше всего это сделать?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
sql
sql-server
database
tsql
Джош Майн
источник
источник
Я нашел эту страницу, когда искал решение, которое помогло бы мне выбрать результаты за предыдущий календарный год. Большинство результатов, показанных выше, похоже, возвращают товары за последние 365 дней, что у меня не сработало.
В то же время он дал мне достаточно направления, чтобы решить мои потребности в следующем коде, который я публикую здесь для всех, у кого такая же потребность, как у меня, и кто может натолкнуться на эту страницу в поисках решения.
Спасибо тем, чьи решения помогли мне прийти к тому, что мне было нужно.
источник
Что ж, думаю, здесь чего-то не хватает. Пользователь хочет получить данные за последний год, а не за последние 365 дней. Есть огромная разница. На мой взгляд, данные за последний год - это все данные за 2007 год (если я сейчас в 2008 году). Итак, правильный ответ:
Затем, если вы хотите ограничить этот запрос, вы можете добавить другой фильтр, но всегда искать в прошлом году.
источник
Искать датудобавить в BOL
источник
Самый читаемый, ИМО:
Который:
Существуют варианты с DATEDIFF и DATEADD, чтобы получить вам полночь сегодня, но они, как правило, довольно тупые (хотя немного лучше по производительности - не то, чтобы вы заметили по сравнению с чтениями, необходимыми для выборки данных).
источник
GETDATE()
возвращает текущую дату и время .Если прошлый год начинается в полночь текущего дня прошлого года (как в исходном примере), вы должны использовать что-то вроде:
источник
Другие предложения хороши, если у вас есть «только SQL».
Однако я предлагаю - если возможно - вычислить дату в своей программе и вставить ее как строку в запрос SQL.
По крайней мере, для больших таблиц (например, несколько миллионов строк, возможно, в сочетании с объединениями), это даст вам значительное улучшение скорости, поскольку оптимизатор может работать с этим намного лучше.
источник
аргумент для функции DATEADD:
datepart может быть: yy, qq, mm, dy, dd, wk, dw, hh, mi, ss, ms.
число - это выражение, которое может быть преобразовано в int, которое добавляется к дате; часть даты
date - это выражение, которое может быть преобразовано в значение time, date, smalldatetime, datetime, datetime2 или datetimeoffset.
источник
источник
Я, как и @DE White, пришел сюда по тем же, но другим причинам, чем исходный вопрос. В исходном вопросе задаются последние 365 дней. Ответ @samjudson обеспечивает это. Ответ @DE White возвращает результаты за предыдущий календарный год.
Мой запрос немного отличается тем, что он работает за предыдущий год до текущей даты включительно:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Например, 17 февраля 2017 г. этот запрос возвращает результаты с 01.01.2016 по 17.02.2017.
источник
У меня была аналогичная проблема, но предыдущий кодировщик предоставлял дату только в формате мм-гггг. Мое решение простое, но может оказаться полезным для некоторых (я также хотел убедиться, что начальные и конечные пробелы удалены):
источник
По какой-то причине ни один из приведенных выше результатов не помог мне.
Это выбирает последние 365 дней.
источник