Как выбрать два последних года в более актуальном году

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