質問: '2016-07-22 23:59:59' SELECT COUNT(*) AS 数 FROM hoge WHERE 開始日時 <= @対象日時 AND (終了日時 < @対象日時 OR 終了日時 IS NULL) ``` 日付マスタのようなものはあるので、そこで1ヶ月分の日付のリストを作成し、LEFT OUTER JOIN させるようなことを考えています。 ループさせるのではなくSQLで解決させるにはどうすればよいでしょうか? どのような結果が欲しいか追記します。 たとえば、下記のようなレコードがあった場合 ``` ID,開始日時,終了日時 1,"2016-04-02 01:00:00","2016-04-05 01:00:00" 2,"2016-04-04 01:00:00",NULL ``` 結果としては ``` 日付,件数 "2016-04-01", 0 //1件もない "2016-04-02", 1 //1のデータのみ "2016-04-03", 1 //1のデータのみ "2016-04-04", 2 //1と2のデータ "2016-04-05", 1 //1のデータは23:59:59には終了していて2のデータのみ "2016-04-06", 1 //2のデータのみ ``` といった感じになります。日付のところは、上記の例だと ``` SELECT 日付 FROM 日付マスタ WHERE 日付 BETWEEN '2016-04-01' AND '2016-04-06' ``` というように取り出せます。 わかりにくくて申し訳ありませんがよろしくお願いいたします。
回答: 予めカレンダーテーブルを用意しておかないかぎり、 データの無い日付を抽出することはできません。 予め10年分くらいの有効日付を投入しておけばよいかと