我必须在视图中动态基于Marked_Yr筛选数据。由于数据错误和数据质量问题,我无法使用Created_On
。
[Marked_YR列的每年,从2019年1月1日到2019年5月31日,它将填充为2019
年,从2019年6月1日到2020年5月31日,它将填充为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
雪花中
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))
汤姆,我明白了您的要求。
这是我的解决方案,它在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