首页 > 解决方案 > GROUP BY 将日期折叠到 CSV 分隔列中

问题描述

假设我有一个如下数据集:

╔═══════╦══════════════════╦══════════════════╦═══════════════════╗
║ Count ║    Min(Time)     ║    Max(Time)     ║      Domain       ║
╠═══════╬══════════════════╬══════════════════╬═══════════════════╣
║   647 ║ 2021-01-06 13:08 ║ 2021-01-12 16:25 ║ mail.yahoo.com    ║
║   350 ║ 2021-01-06 13:08 ║ 2021-01-12 16:24 ║ mail.google.com   ║
║   133 ║ 2021-01-06 13:08 ║ 2021-01-12 16:28 ║ www.google.com    ║
║    27 ║ 2021-01-06 13:10 ║ 2021-01-12 15:49 ║ t.fluff.com       ║
║    22 ║ 2021-01-06 15:52 ║ 2021-01-12 15:55 ║ www.thethings.com ║
╚═══════╩══════════════════╩══════════════════╩═══════════════════╝

还有一个简单的 GROUP BY 语句,如下所示:

SELECT COUNT(DOMAIN), MIN(TIME), MAX(Time), Domain  
FROM TABLE 
GROUP BY DOMAIN 
ORDER BY COUNT(DOMAIN) DESC

SQLLite 中是否有一种方法可以展平时间列,这样我就可以将所有时间列为从最旧到最新的 CSV 列。知道这在 SQL Server 和 Oracle 中具有 XML 路径和其他幻想是可能的,实现这一点的最简单方法是我可以针对简单的 SQLLite 数据库运行。谢谢

标签: sqlsqlite

解决方案


您可以group_concat按如下方式使用:

SELECT COUNT(DOMAIN), MIN(TIME), MAX(Time), Domain  ,
     Group_concat(time)
FROM TABLE 
GROUP BY DOMAIN 
ORDER BY COUNT(DOMAIN) DESC

推荐阅读