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

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

DDD
リリース: 2024-12-13 17:52:16
オリジナル
509 人が閲覧しました

How Can I Fill in Missing Dates in My SQL Queries?

SQL クエリの単純な日付パディング

日付を含むデータを MySQL テーブルからフェッチすると、返されるデータにギャップが発生することがよくあります。これらのギャップを埋めて完全な日付シーケンスを作成するには、いくつかの方法があります。

MySQL サーバー側のアプローチ

効果的な方法の 1 つは、一時テーブルを作成することです。 MySQL では、目的の日付範囲にわたる。これは、次のストアド プロシージャを使用して実行できます。

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;
end procedure
ログイン後にコピー

このプロシージャは、指定された範囲内のすべての日付を含む foo という名前の一時テーブルを生成します。その後、元のテーブルを foo で左結合して、欠落している日付をカウント 0 で埋めることができます。

Perl クライアント側のアプローチ

へのアクセスが制限されている場合は、 MySQL サーバーを使用する場合や、より柔軟性が必要な場合は、Perl クライアント側で日付のパディングを処理することもできます。 Date::Parse や DateTime::Lite:

use DateTime;

my $start_date = '2008-08-05';
my $end_date = '2008-08-07';

my $date_range = DateTime->range(start => $start_date, end => $end_date);
for my $date in $date_range->each('day') {
    print CSV "$date,0\n";
}
ログイン後にコピー

などのモジュールの使用を検討してください。このアプローチでは、指定された日付範囲を反復処理し、欠落している日付をカウント 0 で出力します。

結論

特定の状況とサーバーの機能に応じて、サーバー側とクライアント側のアプローチの両方で、次のオプションが提供されます。 SQL クエリでの空の日付の埋め込み。サーバー側のアプローチはより効率的ですが、データベースへのアクセスが必要です。一方、クライアント側のアプローチは柔軟性に優れていますが、パフォーマンスのオーバーヘッドが発生する可能性があります。

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

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