我有一个表,其中的数据如下:
日期 | qlfd_lvl | actv_ind | 最后一个值 |
---|---|---|---|
20230301 | 4 | 1 | 4 |
20230302 | 2 | 1 | 2 |
20230303 | 3 | 0 | 2 |
20230304 | 1 | 0 | 2 |
20230305 | 3 | 1 | 3 |
20230306 | 2 | 0 | 3 |
20230307 | 1 | 0 | 3 |
last_value 列有 2 个条件 1.条件:actv_ind=1则结果将与campaign qlfd_lvl值相同。 2.条件:actv_ind=0则结果将在之前的actv_ind=1时则将采用该日期qlfd_lvl值作为结果
(在雪花SQL中我尝试过LAG和last_value但我没有得到逻辑)
您遇到了间隙和岛屿问题,您可以使用运行总计为每个连续的行组提供不同的ID(1后跟零),然后我们可以使用窗口函数
FIRST_VALUE()
来获得期望值:
WITH cte as (
SELECT *, SUM(actv_ind) over (ORDER BY date) AS sm
FROM cte
)
SELECT *, FIRST_VALUE(qlfd_lvl) over (PARTITION BY sm ORDER BY date ) AS LAST_VALUE
FROM cte