ホームページ > データベース > mysql チュートリアル > 完全なデータ表現を保証するために SQL 結果の空の日付を埋め込む方法

完全なデータ表現を保証するために SQL 結果の空の日付を埋め込む方法

Patricia Arquette
リリース: 2024-12-30 11:00:17
オリジナル
186 人が閲覧しました

How to Pad Empty Dates in SQL Results to Ensure Complete Data Representation?

SQL 結果の空の日付のパディング

提供された例のように、ギャップを含むデータを扱う場合は、パディングする必要があります。完全かつ正確な表現を保証するために空の日付を使用します。この問題に対処するためのいくつかのアプローチを次に示します。

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

Perl ソリューション

または、 Perl の Date::Calc モジュールを使用して日付のリストを生成し、foreach を使用して空の日付を埋め込むことができますループ:

use Date::Calc qw(:all);
my @dates;
my ($d1, $d2) = ('2008-08-05', '2008-08-07');  # Modify these as needed
my $dates_per_month = @DaysInMonth[year($d2)-1900][month($d2)-1];  
my $d = $d1;
while ($d < $d2) {
  push @dates, $d;
  $d = NextDay($d);
}
my %counts;
while (my ($date, $sum) = $sth->fetchrow) {
  $counts{$date} = $sum;
}
foreach my $date (@dates) {
  print CSV "$date,$counts{$date} || 0\n"  # Print 0 for empty dates
}
ログイン後にコピー

追加の考慮事項

最も適切なソリューションは、特定の要件とリソースの可用性によって異なります。大規模なデータセットの場合、ストアド プロシージャ アプローチの方がパフォーマンスが高い場合がありますが、Perl ソリューションの方が柔軟性が高くなります。次の追加要素を考慮してください:

  • 日付範囲が固定され、事前にわかっている場合は、ストアド プロシージャを使用します。
  • 日付に対してより複雑な操作を実行する必要がある場合は、Perl を使用します。関連データ。
  • 高度な日付処理機能については、DateTime などの他のモジュールを調べてください。

以上が完全なデータ表現を保証するために SQL 結果の空の日付を埋め込む方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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