MySQL でデータを週ごとにグループ化する
時系列データを扱う場合、レコードを週ごとにグループ化すると便利なことがよくあります。 Oracle ではこの目的のための組み込み関数が提供されていますが、MySQL では少し異なるアプローチが必要です。
平日の切り捨て
タイムスタンプを前の日曜日の午前 0 時まで切り捨てるには、次のようにします。 Oracle では TRUNC(timestamp,'DY') を使用して実行されますが、MySQL には直接同等のものはありません。ただし、次の式を使用してこの動作をエミュレートできます:
DATE_ADD(DATE(timestamp), INTERVAL (DAYOFWEEK(timestamp) - 7) DAY)
この式では、タイムスタンプから現在の曜日が減算され、前の日曜日に対応する日付が得られます。
Month Truncation
タイムスタンプを初日の午前 0 時までに切り捨てます。 MySQL は、Oracle の TRUNC(timestamp, 'MM') に似た単純な DATE_FORMAT(timestamp, '%Y-%m-01') 関数を提供します。
週の切り捨て
MySQL には WEEK(タイムスタンプ) 関数がありますが、これはその年の内の週番号を返します。週番号ではなく完全な週でグループ化するには、次のように SELECT 句と GROUP BY 句で YEAR(timestamp) と WEEK(timestamp) を組み合わせます。
SELECT YEAR(timestamp), WEEK(timestamp) FROM ... WHERE ... GROUP BY YEAR(timestamp), WEEK(timestamp)
あるいは、YEARWEEK を使用することもできます。 (mysqldatefield) 関数。年と週の番号を組み合わせて返します。ただし、その出力は、YEAR(タイムスタンプ) / WEEK(タイムスタンプ) アプローチほどユーザーフレンドリーではない可能性があります。
注: 1 月にまたがる週を含む完全な週ごとに集計する場合まず、2 番目の引数 (mode) を 0 またはいずれかに設定して YEARWEEK(mysqldatefield) を使用することを検討してください。 2.
例:
次のクエリは、完全な週ごとにデータをグループ化します:
SELECT YEARWEEK(timestamp, 0) AS week_number, SUM(value) AS total FROM data WHERE ... GROUP BY week_number
以上がMySQL で時系列データを週ごとに効率的にグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。