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

如何通过单条SQL查询按日期分组聚合对象ID集合?

解决方案:按日期分组聚合ID列表

没问题!完全可以通过单条SQL查询实现这个需求,本质就是按日期分组后把同组的ID聚合起来,不同的数据库有对应的聚合函数来搞定,我给你梳理几种常用场景的写法:

先明确原表结构与数据

原表结构

CREATE TABLE your_table (
    id VARCHAR(50),
    start TIMESTAMP
);

原数据

idstart
06c561305383482e98064ssdfd6ccf742019-08-30 14:41:40.697301
0aec07d9acdd48c485ab3sfhsffdsa8c2019-09-02 05:45:09.274541
0d240asdfasd49579e2be8821b908fdc2019-09-02 05:45:08.745885
00al4eebb9a34sdsdfsdff128518dc4f2019-08-30 14:42:29.094314

各数据库实现方式

1. MySQL 5.7+

用GROUP_CONCAT函数来聚合ID,搭配DATE()提取日期部分:

SELECT
    DATE(start) AS date,
    CONCAT('- ', GROUP_CONCAT(id SEPARATOR '\n- ')) AS ids
FROM your_table
GROUP BY DATE(start);

查询结果里的ids字段会直接生成带列表前缀的格式,和你想要的结构很接近。

2. PostgreSQL

用STRING_AGG做字符串聚合,或者ARRAY_AGG生成数组(方便应用层处理):

字符串聚合写法

SELECT
    DATE(start) AS date,
    CONCAT('- ', STRING_AGG(id, '\n- ')) AS ids
FROM your_table
GROUP BY DATE(start);

数组聚合写法(推荐应用层处理格式)

SELECT
    DATE(start) AS date,
    ARRAY_AGG(id) AS ids_array
FROM your_table
GROUP BY DATE(start);

拿到数组后,在应用里遍历就能轻松生成你要的列表格式。

3. SQL Server 2017+

用STRING_AGG函数,注意用CHAR(10)表示换行:

SELECT
    CONVERT(DATE, start) AS date,
    CONCAT('- ', STRING_AGG(id, CHAR(10) + '- ')) AS ids
FROM your_table
GROUP BY CONVERT(DATE, start);

额外提示

如果你的数据库版本较低,不支持这些聚合函数,可以用窗口函数或者自连接的方式实现,但上面的写法是最简洁高效的。另外,要是需要严格输出成你展示的那种文本格式,建议在查询得到聚合结果后,在应用程序层面做最终的格式拼接,这样会更灵活可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:14