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

SQL Server 如何筛选连续相同值分组的最早日期记录?

SQL连续值变更历史查询实现方案

核心逻辑

要实现连续相同Value仅保留最早日期记录的需求,采用连续岛屿标记法处理,步骤如下:

  • 按ID分组、Date升序排序,通过LAG窗口函数获取当前记录的前一条Value值
  • 对每条记录标记是否发生Value变更(第一条记录默认算变更)
  • 对变更标记做累加求和,相同连续Value的记录会得到相同的分组ID
  • 每个分组取最小Date的记录即为最终结果

通用实现代码

WITH value_change_flag AS (
    SELECT
        ID,
        Value,
        Date,
        -- 标记当前值与上一条是否不同,不同则记为1
        CASE 
            WHEN LAG(Value) OVER (PARTITION BY ID ORDER BY Date) = Value 
            THEN 0 
            ELSE 1 
        END AS is_changed
    FROM 你的业务表名
),
continuous_group AS (
    SELECT
        ID,
        Value,
        Date,
        -- 累加变更标记,生成连续相同值的分组ID
        SUM(is_changed) OVER (PARTITION BY ID ORDER BY Date) AS group_id
    FROM value_change_flag
)
-- 每个连续值分组仅保留最早日期的记录
SELECT ID, Value, MIN(Date) AS Date
FROM continuous_group
GROUP BY ID, Value, group_id
ORDER BY ID, Date;

使用说明

将代码中的你的业务表名替换为实际业务表名称即可,执行后输出结果与需求预期完全匹配,支持MySQL8.0+、PostgreSQL、SQL Server、Hive等所有支持标准窗口函数的数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:04