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

SQL クエリ結果で欠落している日付を埋めるにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-23 14:34:20680ブラウズ

How to Fill Missing Dates in SQL Query Results?

SQL 結果で欠落している日付を埋め込む

日付範囲をデータベースにクエリする場合、データにギャップが発生するのが一般的です。これに対処するには、結果を空の日付と対応するカウントで埋め込む簡単な方法がいくつかあります。

MySQL 側

1 つのオプションは、ストアド プロシージャを作成することです。指定された範囲内のすべての可能な日付を含む一時テーブルを生成します。このテーブルをクエリ結果と結合したままにし、欠落している日付を埋めることができます。

CREATE PROCEDURE sp1(d1 DATE, d2 DATE)
DECLARE d DATETIME;

CREATE TEMPORARY TABLE foo (d DATE NOT NULL);

SET d = d1
WHILE d <= d2 DO
  INSERT INTO foo (d) VALUES (d)
  SET d = DATE_ADD(d, INTERVAL 1 DAY)
END WHILE

SELECT foo.d, COUNT(date)
FROM foo LEFT JOIN table ON foo.d = table.date
GROUP BY foo.d ORDER BY foo.d ASC;

DROP TEMPORARY TABLE foo;

Perl 側

Perl モジュールが Date:: の場合y が使用可能な場合は、日付範囲を反復処理して、クエリ結果に空の日付が含まれているかどうかを確認できます。見つかった場合は、その日付のゼロカウント エントリを追加します。

use Date::y;

# Get the date range
my $d1 = '2008-08-05';
my $d2 = '2008-08-07';

# Iterate over the date range
my $date = Date::y->date($d1);
while ($date <= Date::y->date($d2)) {
  # Check if the date exists in the query results
  if (! exists $results{$date}) {
    # Add the date with a zero count
    $results{$date} = 0;
  }
  $date = $date->next;
}

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。