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 ソリューションの方が柔軟性が高くなります。次の追加要素を考慮してください:
以上が完全なデータ表現を保証するために SQL 結果の空の日付を埋め込む方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。