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

编写SQL查询以获取rate在指定日期间未发生变化的连续时段数据

连续未变化rate时段查询语句

适用范围

支持所有支持标准SQL窗口函数的数据库(MySQL 8.0+、PostgreSQL、Oracle、SQL Server等)

查询代码

WITH diff_mark AS (
    SELECT 
        date,
        rate,
        -- 标记当前行rate和上一行是否不同,不同则打标1
        CASE WHEN rate != LAG(rate, 1) OVER (ORDER BY date) THEN 1 ELSE 0 END AS is_diff
    FROM 替换为你的实际表名
),
group_calc AS (
    SELECT 
        date,
        rate,
        -- 累加标记得到分组ID,相同分组内为连续相同rate的记录
        SUM(is_diff) OVER (ORDER BY date) AS group_id
    FROM diff_mark
)
SELECT 
    MIN(date) AS startdate,
    MAX(date) AS enddate,
    rate
FROM group_calc
GROUP BY group_id, rate
ORDER BY startdate;

逻辑说明

  1. 第一步通过LAG窗口函数获取按日期排序后上一行的rate值,和当前行对比,不同则标记为1,相同标记为0
  2. 第二步对标记值做累加求和,得到分组ID,每次rate变化时分组ID就会+1,保证连续相同rate的记录分到同一个组
  3. 最后按分组ID和rate聚合,取每组最小日期为区间起始日期,最大日期为区间结束日期即可

样例验证

输入数据

daterate
2014-09-18270
2014-09-19270
2014-09-20310
2014-09-21310
2014-09-22310
2014-09-23320
2014-09-24310
2014-09-25320
2014-09-26270

输出结果

startdateenddaterate
2014-09-182014-09-19270
2014-09-202014-09-22310
2014-09-232014-09-23320
2014-09-242014-09-24310
2014-09-252014-09-25320
2014-09-262014-09-26270

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:57:02