根据年份SQL动态过滤最近两年的数据

问题描述 投票:0回答:2

我必须在视图中动态基于Marked_Yr筛选数据。由于数据错误和数据质量问题,我无法使用Created_On

[Marked_YR列的每年,从2019年1月1日到2019年5月31日,它将填充为2019年,从2019年6月1日到2020年5月31日,它将填充为2020,并重复相同的过程。

如何在不进行硬编码的情况下动态获取Marked_Yr数据20192020

例如:

|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
sql sql-server filter view snowflake-cloud-data-platform
2个回答
0
投票

雪花中

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

0
投票

汤姆,我明白了您的要求。

这是我的解决方案,它在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
© www.soinside.com 2019 - 2024. All rights reserved.