在 MySQL 中按週將資料分組
在處理時間序列資料時,按週對記錄進行分組通常很有用。雖然 Oracle 為此目的提供了內建函數,但 MySQL 需要稍微不同的方法。
工作日截斷
將時間戳截斷到上週日的午夜,如下所示在Oracle 中使用TRUNC(timestamp,'DY') 完成,My不提供直接的等效項。但是,您可以使用以下表達式來模擬此行為:
DATE_ADD(DATE(timestamp), INTERVAL (DAYOFWEEK(timestamp) - 7) DAY)
此表達式從時間戳中減去當前星期幾,從而得到與上週日相對應的日期。
月份截斷
為了將時間戳截斷到該月第一天的午夜,MySQL 提供了簡單的方法DATE_FORMAT(timestamp, '%Y-%m -01') 函數,類似Oracle 的TRUNC(timestamp,'MM')。
週截斷
雖然MySQL有WEEK(timestamp)函數,但它傳回一年內的周數。若要以完整週而不是週數分組,您可以在SELECT 和GROUP BY 子句中組合YEAR(timestamp) 和WEEK(timestamp),如下所示:
SELECT YEAR(timestamp), WEEK(timestamp) FROM ... WHERE ... GROUP BY YEAR(timestamp), WEEK(timestamp)
或者,您可以使用YEARWEEK (mysqldatefield) 函數,傳回年份和週數的組合。但是,其輸出可能不如 YEAR(timestamp) / WEEK(timestamp) 方法那麼使用者友善。
注意: 按完整週進行聚合,包括跨越一月的周數1,考慮使用 YEARWEEK(mysqldatefield) 並將第二個參數(模式)設為 0或2.
範例:
以下查詢以完整週將資料分組:
SELECT YEARWEEK(timestamp, 0) AS week_number, SUM(value) AS total FROM data WHERE ... GROUP BY week_number
以上是如何在 MySQL 中按週有效率地對時間序列資料進行分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!