ホームページ > データベース > mysql チュートリアル > MySQL で時系列データを週ごとに効率的にグループ化するにはどうすればよいですか?

MySQL で時系列データを週ごとに効率的にグループ化するにはどうすればよいですか?

DDD
リリース: 2024-12-13 06:02:10
オリジナル
708 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート