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

如何将重复ID对应的多组Created Date合并至单行记录

合并重复ID的日期记录为单行,分字段展示Created Date和Duplicate Date

需求说明

现有数据库表存在ID重复的记录,每个ID对应多条Created Date,需将同一ID的日期合并至同一行,其中Created Date保留最早的日期,Duplicate Date保留该ID下的其他日期(示例中每个ID仅两条记录)。

原始数据

IDCreated Date
12024-07-23 00:25:17.113
12024-07-23 00:31:17.113
22024-07-23 00:22:17.113
22024-07-23 00:29:17.113

期望结果

IDCreated DateDuplicate Date
12024-07-23 00:25:17.1132024-07-23 00:31:17.113
22024-07-23 00:22:17.1132024-07-23 00:29:17.113

解决方案

场景1:每个ID最多两条记录

使用窗口函数标记每条记录的顺序,再通过条件聚合提取对应字段,适用于MySQL 8.0+、PostgreSQL、SQL Server:

SELECT 
    ID,
    MAX(CASE WHEN rn = 1 THEN Created_Date END) AS Created_Date,
    MAX(CASE WHEN rn = 2 THEN Created_Date END) AS Duplicate_Date
FROM (
    SELECT 
        ID,
        Created_Date,
        -- 按ID分组,按日期升序排序,标记行号
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Created_Date) AS rn
    FROM your_table_name
) t
GROUP BY ID;

场景2:每个ID可能有多个重复日期

如果需要将所有重复日期合并为一个字段(用分隔符拼接),可使用字符串聚合函数:

MySQL

SELECT 
    ID,
    MIN(Created_Date) AS Created_Date,
    -- 按日期倒序拼接所有重复日期
    GROUP_CONCAT(Created_Date SEPARATOR ', ' ORDER BY Created_Date DESC) AS Duplicate_Dates
FROM your_table_name
GROUP BY ID
-- 仅保留有重复的ID
HAVING COUNT(*) > 1;

PostgreSQL

SELECT 
    ID,
    MIN(Created_Date) AS Created_Date,
    STRING_AGG(Created_Date::TEXT, ', ' ORDER BY Created_Date DESC) AS Duplicate_Dates
FROM your_table_name
GROUP BY ID
HAVING COUNT(*) > 1;

SQL Server

SELECT 
    ID,
    MIN(Created_Date) AS Created_Date,
    STRING_AGG(Created_Date, ', ') WITHIN GROUP (ORDER BY Created_Date DESC) AS Duplicate_Dates
FROM your_table_name
GROUP BY ID
HAVING COUNT(*) > 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:43:24