#sql #dateadd #snowflake-sql
Вопрос:
Я хотел бы знать, как мы можем выбрать два последних года в большем количестве в текущем году.
Например, если у меня есть такая таблица :
id date_enter cost
1 19/09/2019 400$
1 20/09/2020 402$
1 19/04/2021 450$
1 19/09/2018 500$
1 05/03/2019 600$
1 19/09/2015 400$
Тогда я хочу этого :
id date_enter cost
1 19/09/2019 400$
1 20/09/2020 402$
1 19/04/2021 450$
1 05/03/2019 600$
Я попытался использовать dateadd, как это :
date_enter>=DATEADD(year,-2,GETDATE())
Но я только что получил 2 в прошлом году, с тех пор я хотел бы получить 2019, 2020 и 2021 годы
Спасибо
Комментарии:
1.
-3
вместо-2
этого ? И, возможно, приведите результатdateadd()
(илиgetdate()
) кdate
тому, чтобы избавиться от части часа и т. Д.datetime
getdate()
, Которую имеют возвраты.2. нет, потому что я получу 2018 год, и я не хочу,
3. Какие СУБД вы используете? SQL Server? Или что-то еще?
4. Я использую snowflake SQL
Ответ №1:
Вы хотите получить данные с 1 января 2019 года (т. е. все данные за 2019, 2020 и 2021 годы). Используйте DATE_FROM_PARTS
для построения этой даты.
select *
from mytable
where date_enter >= date_from_parts(year(current_date) - 2, 1, 1);
Ответ №2:
Если я понимаю ваши потребности, вам нужно будет получить все даты в диапазоне 2 лет назад с СЕГОДНЯШНЕГО дня, включая все после начала этого первого года (в примере после 2019-01-01).
Затем я предложу использовать функцию YEAR для сравнения после вычитания 2 лет.
WHERE YEAR([Date]) >= YEAR(DATEADD(YEAR,-2,GETDATE()))
Краткий пример:
DECLARE @tblDates TABLE
(
[Date] DATE
)
INSERT INTO @tblDates ([Date]) SELECT CONVERT(DATETIME2,'19/09/2019',103)
INSERT INTO @tblDates ([Date]) SELECT CONVERT(DATETIME2,'20/09/2020',103)
INSERT INTO @tblDates ([Date]) SELECT CONVERT(DATETIME2,'19/04/2021',103)
INSERT INTO @tblDates ([Date]) SELECT CONVERT(DATETIME2,'19/09/2018',103)
INSERT INTO @tblDates ([Date]) SELECT CONVERT(DATETIME2,'05/03/2019',103)
INSERT INTO @tblDates ([Date]) SELECT CONVERT(DATETIME2,'19/09/2015',103)
SELECT * FROM @tblDates
WHERE YEAR([Date]) >= YEAR(DATEADD(YEAR,-2,GETDATE()))