You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake SQL查询需求:筛选bygr与calc_date同时变更的记录

Snowflake SQL 解决方案:筛选同一startdate下bygr与calc_date均变更的记录

可以通过窗口函数LAG()对比同一startdate和name分组内的前后记录,精准筛选出两个字段均发生变更的行,具体实现如下:

WITH record_changes AS (
    SELECT 
        nr,
        name,
        startdate,
        calc_date,
        bygr,
        -- 取同组内上一条记录的bygr值
        LAG(bygr) OVER (PARTITION BY startdate, name ORDER BY calc_date) AS prev_bygr,
        -- 取同组内上一条记录的calc_date值
        LAG(calc_date) OVER (PARTITION BY startdate, name ORDER BY calc_date) AS prev_calc_date
    FROM your_table_name -- 替换为你的实际表名
)
SELECT 
    nr,
    name,
    startdate,
    calc_date,
    bygr
FROM record_changes
WHERE 
    -- 判定bygr和calc_date均与上一条记录不同
    bygr IS DISTINCT FROM prev_bygr
    AND calc_date IS DISTINCT FROM prev_calc_date
    -- 排除分组内的第一条记录(无前置对比项)
    AND prev_bygr IS NOT NULL;

关键说明:

  • 窗口函数逻辑:PARTITION BY startdate, name确保只在同一日期、同一人员的范围内对比;ORDER BY calc_date保证按时间顺序取前一条记录,符合变更的时间逻辑。
  • NULL值兼容:使用IS DISTINCT FROM而非!=,避免因字段为NULL导致的对比失效(Snowflake原生支持该语法)。
  • 筛选逻辑:仅保留同时满足bygr和calc_date均发生变更的行,且排除每组中无前置记录的首行。

如果需要包含每组中首次出现的记录(作为变更的起始参照),可以去掉AND prev_bygr IS NOT NULL条件,同时可在结果中新增标记字段区分初始记录。

内容的提问来源于stack exchange,提问作者Diana Behr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:36