ホームページ >データベース >mysql チュートリアル >SQL クエリ結果で欠落している日付を埋めるにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。