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

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

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()

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

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

То, что вы делаете, в порядке. Дважды проверьте свой вывод.

James 16.07.2019 00:18

Если я пытаюсь получить его туда, где он встанет до месяца, предшествующего GETDATE(), нужно ли мне настроить второй GETDATE() на DATEADD(MONTH, -1, GETDATE())?

jwalls91 16.07.2019 00:19

То, что вы делаете, в порядке. Другое дело, если вы хотите охватить период с 1 июля 2018 года по 1 июля 2019 года. Если это не так, ваш запрос правильный.

James 16.07.2019 00:23

Это вопрос объединения правильных функций. Как в этих примерах: zarez.net/?p=2462

Nick.McDermaid 16.07.2019 00:31
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
2 262
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

where start_date >= datefromparts(year(getdate()) - 1, 1, 1) and
      start_date < datefromparts(year(getdate() - 1, month(getdate()), day(getdate())
Ответ принят как подходящий

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

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)

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

Другие вопросы по теме