雪花中的LAG()和LAST_VALUE

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

我有一个表,其中的数据如下:

日期 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但我没有得到逻辑)

snowflake-cloud-data-platform lag gaps-and-islands
1个回答
0
投票

您遇到了间隙和岛屿问题,您可以使用运行总计为每个连续的行组提供不同的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
© www.soinside.com 2019 - 2024. All rights reserved.