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

SQL实现同分组所有值拼接为新字段的方法问询

SQL实现方案

核心逻辑是使用窗口聚合函数替代普通GROUP BY分组,既可以按id分组完成组内排序拼接,又能完整保留原表的所有行,且同id分组下所有行返回一致的拼接结果。
以下是不同主流数据库的实现代码,假设你的表名为t,时间戳字段名为ts,可根据实际字段名替换:

MySQL 8.0+/MariaDB

SELECT 
    id,
    att_1,
    ts,
    GROUP_CONCAT(att_1 ORDER BY ts ASC SEPARATOR ',') OVER (PARTITION BY id) AS att_2
FROM t;

PostgreSQL

SELECT 
    id,
    att_1,
    ts,
    STRING_AGG(att_1, ',' ORDER BY ts ASC) OVER (PARTITION BY id) AS att_2
FROM t;

SQL Server 2017及以上

SELECT 
    id,
    att_1,
    ts,
    STRING_AGG(att_1, ',') WITHIN GROUP (ORDER BY ts ASC) OVER (PARTITION BY id) AS att_2
FROM t;

Hive/Spark SQL

SELECT 
    id,
    att_1,
    ts,
    CONCAT_WS(',', COLLECT_LIST(att_1) OVER (
        PARTITION BY id 
        ORDER BY ts ASC 
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    )) AS att_2
FROM t;

注意事项

  • 若同id、同时间戳的att_1值需要去重,可在聚合函数中加入DISTINCT关键字,例如MySQL中改为GROUP_CONCAT(DISTINCT att_1 ORDER BY ts ASC SEPARATOR ',')
  • MySQL默认GROUP_CONCAT的最大拼接长度为1024字节,若拼接内容过长,需提前执行SET group_concat_max_len = 1000000;调整长度限制(数值可按需修改)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:10