首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 同一天不同時刻數據分組查詢技巧

     編輯:程式設計綜合問答

如何將同一天的多條記錄合併查詢

業務場景:表中存儲精確到分鐘的時間戳,需按「天」維度聚合展示。例如:

2015/05/01 02:00
2015/05/01 05:30
2015/05/01 18:00
2015/05/03 13:00
...

核心思路:日期截取 + GROUP BY

不同數據庫的日期截取函數不同,但邏輯一致:

MySQL

SELECT DATE(create_time) AS day, GROUP_CONCAT(TIME(create_time)) AS times
FROM your_table
GROUP BY DATE(create_time);

SQL Server

SELECT CAST(create_time AS DATE) AS day,
       STUFF((SELECT ', ' + CAST(TIME(create_time) AS VARCHAR(5))
              FROM your_table t2
              WHERE CAST(t2.create_time AS DATE) = CAST(t1.create_time AS DATE)
              FOR XML PATH('')), 1, 2, '') AS times
FROM your_table t1
GROUP BY CAST(create_time AS DATE);

Oracle

SELECT TRUNC(create_time) AS day,
       LISTAGG(TO_CHAR(create_time, 'HH24:MI'), ', ') WITHIN GROUP (ORDER BY create_time) AS times
FROM your_table
GROUP BY TRUNC(create_time);

進階:直接聚合統計

若只需每天的記錄數、最早/最晚時間:

SELECT DATE(create_time) AS day,
       COUNT(*) AS cnt,
       MIN(create_time) AS first_time,
       MAX(create_time) AS last_time
FROM your_table
GROUP BY DATE(create_time);

建議在時間欄位上建立索引,大幅提升分組查詢性能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved