首頁 > 資料庫 > mysql教程 > 如何在 MySQL 中按週有效率地對時間序列資料進行分組?

如何在 MySQL 中按週有效率地對時間序列資料進行分組?

DDD
發布: 2024-12-13 06:02:10
原創
643 人瀏覽過

How to Efficiently Group Time-Series Data by Week in MySQL?

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板