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

修复历史数据:GROUP BY语句导致时间区间错误的解决问询

合并连续相同Profit的时间区间问题

你遇到的问题很典型——普通的GROUP BY会把所有相同Profit+ID的行都聚合到一起,但你需要的是连续时间段内相同Profit的区间合并,而不是跨区间的合并。

原始数据

你的历史表temp.[wrong_archiv]数据如下:

valid_fromvalid_toProfitID
20.05.2019 00:0222.05.2019 23:421012345
22.05.2019 23:4228.05.2019 13:111012345
28.05.2019 13:1128.05.2019 23:591012345
28.05.2019 23:5929.05.2019 06:4812312345
29.05.2019 06:4829.05.2019 13:2112312345
29.05.2019 13:2129.05.2019 23:5912312345
29.05.2019 23:5930.05.2019 06:391012345
30.05.2019 06:3930.05.2019 12:3712312345
30.05.2019 12:3731.05.2019 00:0912312345
31.05.2019 00:0931.05.2019 08:4114512345
31.05.2019 08:4101.06.2019 00:2214512345

你之前的错误尝试

你用了下面的GROUP BY语句:

SELECT MIN(valid_from ) AS valid_from ,MAX(valid_to ) AS valid_to ,Profit ,ID
INTO [repaired_archiv]
FROM temp.[wrong_archiv]
GROUP BY Profit ,ID

得到的结果把所有Profit=10的行都合并了,导致valid_to错误:

valid_fromvalid_toProfitID
20.05.2019 00:0230.05.2019 06:391012345
28.05.2019 23:5931.05.2019 00:0912312345
31.05.2019 00:0901.06.2019 00:2214512345

正确解决方案:用窗口函数标记连续区间

我们需要先给连续的相同Profit+ID的行打上同一个分组标记,再进行聚合。下面是实现代码:

WITH grouped_data AS (
    SELECT 
        *,
        -- 当当前行的Profit与前一行不同时,生成新分组,用SUM累加得到分组ID
        SUM(CASE 
                WHEN LAG(Profit) OVER (PARTITION BY ID ORDER BY valid_from) != Profit THEN 1 
                ELSE 0 
            END) OVER (PARTITION BY ID ORDER BY valid_from) AS group_id
    FROM temp.[wrong_archiv]
)
SELECT 
    MIN(valid_from) AS valid_from,
    MAX(valid_to) AS valid_to,
    Profit,
    ID
INTO [repaired_archiv]
FROM grouped_data
GROUP BY ID, Profit, group_id
ORDER BY valid_from;

逻辑解释

  1. LAG(Profit) OVER (PARTITION BY ID ORDER BY valid_from):获取当前行的前一行Profit值(按ID分组、valid_from排序)
  2. CASE判断:如果前一行Profit和当前行不同,就记为1,否则0;用SUM累加这个值,这样连续相同Profit的行会得到同一个group_id
  3. 最后按ID、Profit、group_id分组,取每个组的最小valid_from和最大valid_to,就能得到你想要的连续区间合并结果

预期结果

执行后会得到你需要的正确结果:

valid_fromvalid_toProfitID
20.05.2019 00:0228.05.2019 23:591012345
28.05.2019 23:5929.05.2019 23:5912312345
29.05.2019 23:5930.05.2019 06:391012345
30.05.2019 06:3931.05.2019 00:0912312345
31.05.2019 00:0901.06.2019 00:2214512345

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:45:28