Динамическая фильтрация данных за последние два года по году SQL - PullRequest
0 голосов
/ 28 апреля 2020

Я должен фильтровать данные на основе Marked_Yr динамически в представлении. Я не могу использовать Created_On из-за неверных данных и проблем с качеством данных.

Каждый год для столбца Marked_YR, с 1 января 2019 года по 31 мая 2019 года он будет заполняться как год 2019 и с 1 июня 2019 года до 31 мая 2020 года он будет заполнен как 2020, и тот же процесс повторяется.

Как получить данные Marked_Yr 2019 и 2020 динамически без жесткого кодирования?

Например:

|PersonId|Product|Created_on | Marked_YR | 
+--------+-------+-----------+-----------+
| 1      |P7     |01/01/2018 | 2018      |==> Active record
| 2      |P8     |05/31/2018 | 2018      |==> Active record
| 3      |P2     |06/01/2018 | 2019      |==> Active record
| 4      |P6     |07/01/2018 | 2019      |==> Active record
| 5      |P1     |01/01/2019 | 2019      |==> Active record
| 6      |P2     |02/28/2019 | 2019      |==> Active record
| 7      |P3     |05/31/2019 | 2019      |==> Active record
| 8      |P4     |06/01/2019 | 2020      |==> Active record
| 9      |P4     |12/31/2019 | 2020      |==> Active record
| 10     |P3     |01/01/2020 | 2020      |==> Active record
| 11     |P2     |04/16/2020 | 2020      |==> Active record
| 12     |P4     |06/01/2020 | 2021      | ==> Future record
| 13     |P4     |12/31/2020 | 2021      | ==> Future record
| 14     |P9     |05/31/2021 | 2021      | ==> Future record
| 15     |P7     |06/01/2021 | 2022      | ==> Future record

Вывод на экран:

|PersonId|Product|Created_on | Marked_YR | 
+--------+-------+-----------+-----------+
| 3      |P2     |06/01/2018 | 2019      |==> Active record
| 4      |P6     |07/01/2018 | 2019      |==> Active record
| 5      |P1     |01/01/2019 | 2019      |==> Active record
| 6      |P2     |02/28/2019 | 2019      |==> Active record
| 7      |P3     |05/31/2019 | 2019      |==> Active record
| 8      |P4     |06/01/2019 | 2020      |==> Active record
| 9      |P4     |12/31/2019 | 2020      |==> Active record
| 10     |P3     |01/01/2020 | 2020      |==> Active record
| 11     |P2     |04/16/2020 | 2020      |==> Active record

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Том, я получил ваше требование.

Вот мое решение, оно работает в Snowflake, рассмотрим Test2 в качестве имени вашей таблицы

select * from Test2
where 
(case when MONTH(current_date) <6  and (marked_yr in (YEAR(current_date) ,YEAR(current_date)-1)) then 1
      when MONTH(current_date) >=6 and (marked_yr in (YEAR(current_date) ,YEAR(current_date)+1)) then 1
     else 0
 end) = 1
0 голосов
/ 28 апреля 2020

в Снежинке

WHERE Marked_YR in (YEAR(current_date), YEAR(current_date)-1)

или его можно написать

WHERE Marked_YR BETWEEN YEAR(current_date)-1 AND YEAR(current_date)

также будет работать, и, следовательно, также

WHERE (Marked_YR = YEAR(current_date)-1 OR Marked_YR = YEAR(current_date))
...