ホームページ > データベース > mysql チュートリアル > MySQL クエリで欠落している日付を処理するにはどうすればよいですか?

MySQL クエリで欠落している日付を処理するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-23 11:48:34
オリジナル
261 人が閲覧しました

How to Handle Missing Dates in MySQL Queries?

MySQL クエリのデータ ギャップを埋める方法

この質問では、MySQL 間でクエリを実行するときにデータ ギャップが発生する可能性がある、MySQL の一般的な問題について説明します。特定の日付。ユーザーの既存のクエリは日付ベースのメトリックを取得しますが、欠落している日付のデータは含まれません。

ダミー行ソースを使用してデータ ギャップを埋める

データ ギャップを埋めるには、解決策には、「dates」という名前のヘルパー テーブルを作成することが含まれます。このテーブルには、必要な開始範囲から終了範囲までのすべての日付が含まれています。次に、日付テーブルとメッセージ テーブルの間で LEFT JOIN が実行されます。

変更されたクエリは次のとおりです:

SELECT  d.dt AS date,
        COUNT(*) AS total,
        SUM(attitude = 'positive') AS positive,
        SUM(attitude = 'neutral') AS neutral,
        SUM(attitude = 'negative') AS negative
FROM    dates d
LEFT JOIN
        messages m
ON      m.posted_at >= d.dt
        AND m.posted_at < d.dt + INTERVAL 1 DAYS
        AND spam = 0
        AND duplicate = 0
        AND ignore = 0
GROUP BY
        d.dt
ORDER BY
        d.dt
ログイン後にコピー

説明:

  • 日付テーブルは、目的の範囲内で一連の個別の日付を生成します。
  • LEFT JOIN は、一致するメッセージが存在しない場合でも、日付テーブル内のすべての日付が含まれることを保証します。
  • ON 句のフィルターは、指定された日付の有効なメッセージのみを保証します。
  • GROUP BY 句は、それぞれのデータを集計します。 date.

ダミー行ソースを使用する代替方法

MySQL には、日付のシーケンスを生成するための組み込み関数がないという点で独特です。ただし、他のデータベース システムでは、代替アプローチがいくつか利用できます。

  • PostgreSQL には、generate_series() 関数があります。
  • Oracle と SQL Server は、CONNECT BY または再帰 CTE を使用した再帰をサポートしています。

以上がMySQL クエリで欠落している日付を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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