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

如何在SQL中合并存在日期重叠的记录?

如何在SQL中合并存在日期重叠的记录?

现有数据

NameStart dateEnd Date
Bob1-mar-20235-may-2023
Bob1-may-202325-may-2023

需求

合并同一用户下日期存在重叠或连续的记录,生成覆盖完整时间范围的单条记录。

解决方案

可以借助窗口函数实现分组聚合,以下是通用的SQL写法(适用于PostgreSQL、MySQL 8.0+、SQL Server等支持窗口函数的数据库):

WITH ranked_data AS (
    SELECT 
        Name,
        "Start date" AS start_date,
        "End Date" AS end_date,
        -- 标记分组:当前记录的开始日期不晚于上一条的结束日期则归为同一组
        SUM(CASE WHEN LAG("End Date") OVER (PARTITION BY Name ORDER BY "Start date") >= "Start date" THEN 0 ELSE 1 END) 
        OVER (PARTITION BY Name ORDER BY "Start date") AS group_id
    FROM your_table
)
SELECT 
    Name,
    MIN(start_date) AS "start date",
    MAX(end_date) AS "end date"
FROM ranked_data
GROUP BY Name, group_id
ORDER BY Name, "start date";

逻辑说明

  1. 按Name分组、Start date排序,用LAG函数获取同一用户上一条记录的结束日期。
  2. 通过判断当前记录的开始日期是否小于等于上一条的结束日期,确定是否属于同一连续/重叠时间区间,并用SUM累计生成分组ID。
  3. 按Name和分组ID聚合,取每组的最小开始日期和最大结束日期,得到合并后的结果。

期望输出

Namestart dateend date
Bob1-mar-202325-may-2023

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:22:44