ВЫБЕРИТЕ предыдущий год до текущей даты

У меня есть таблица, в которой есть столбец даты начала, например:

Start Date
2015/01/05
2015/02/08
2016/01/10
2017/02/10
etc...

Я пытаюсь включить в свой пункт WHERE, чтобы выбрать все записи, сделанные за год до этого, на основе текущего GETDATE().

Например, если сегодня июль 2019 года, и я запускаю запрос, я бы хотел, чтобы он выполнялся и дал мне даты начала, начиная с июля 2018 года по июнь 2019 года. И если я запустил его в августе 2019 года, я Я бы хотел, чтобы он показывал даты начала с августа 2018 года по июль 2019 года и так далее. В основном до месяца, предшествующего текущей дате.

В настоящее время у меня есть это в моем предложении WHERE:

WHERE start_date between DATEADD(YEAR,-1, GETDATE()) and GETDATE()

но это кажется, что я думаю, что это произойдет всего за год до точной даты.

Есть ли лучший способ сделать это?


person jwalls91    schedule 15.07.2019    source источник
comment
То, что ты делаешь, нормально. Дважды проверьте свой вывод.   -  person Jaime Drq    schedule 16.07.2019
comment
Если я пытаюсь доставить его туда, где он появляется, до месяца, предшествующего GETDATE (), мне нужно настроить второй GETDATE () на DATEADD (MONTH, -1, GETDATE ())?   -  person jwalls91    schedule 16.07.2019
comment
То, что ты делаешь, нормально. Другое дело, если вы хотите охватить период с 1 июля 2018 года по 1 июля 2019 года. Если нет, ваш запрос верен.   -  person Jaime Drq    schedule 16.07.2019
comment
Это вопрос объединения правильных функций. Как эти примеры: zarez.net/?p=2462   -  person Nick.McDermaid    schedule 16.07.2019


Ответы (2)


Я думаю, что это ваше требование:

WHERE start_date BETWEEN
  DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1) 
  AND
  DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)

С участием:

DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1)

вы получаете 1-е число текущего месяца в прошлом году.
С:

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)

вы получаете последний день предыдущего месяца.
См. демонстрацию.

person forpas    schedule 15.07.2019

Вы можете использовать datefromparts() в SQL Server:

where start_date >= datefromparts(year(getdate()) - 1, 1, 1) and
      start_date < datefromparts(year(getdate() - 1, month(getdate()), day(getdate())
person Gordon Linoff    schedule 15.07.2019