customer
に表示されていない日も含め、すべての日を一覧表示する方法を探しています。 テーブル。これはSQLの首の悪名高い痛みです。これは、SQLの純粋な形式では、基数、日数など、何でも連続したシーケンスの概念が欠けているためです。
したがって、連続する基数や日付などのソースを含むテーブルを導入してから、既存のデータをそのテーブルに左結合する必要があります。
それを行うにはいくつかの方法があります。 1つは、自分でcalendar
を作成することです。 現在の10年または世紀などの毎日の行を含むテーブルに参加します。 (このテーブルは、最新のデータベースの機能と比較してそれほど大きくはありません。
そのテーブルがあり、date
という名前の列があるとします。 。次に、これを行います。
SELECT calendar.date AS created,
ISNULL(a.customer_count, 0) AS customer_count
FROM calendar
LEFT JOIN (
SELECT COUNT(*) AS customer_count,
DATE(created) AS created
FROM customer
GROUP BY DATE(created)
) a ON calendar.date = a.created
WHERE calendar.date BETWEEN start AND finish
ORDER BY calendar.date
いくつかのことに注意してください。まず、LEFT JOIN
カレンダーテーブルからデータセットへ。通常のJOIN
を使用する場合 データセットにデータがない場合、カレンダーの行が抑制されます。
次に、ISNULL
トップレベルのSELECT
データセットから欠落しているnull値をゼロ値に変換します。
さて、あなたは尋ねます、どこでそのカレンダーテーブルを手に入れることができますか?それを調べて、理解できない場合は別の質問をすることをお勧めします。
これについて少しエッセイを書きました。これはここにあります。