SQLServerの再帰SQLで歯抜けの日付データを取得する

処理が自動実行(バッチ処理)で実行された日付を管理しているテーブルから、処理が実行されなかった日(歯抜けの日付データ)を抜き出す必要があったのでSQLを作ってみました。

スポンサーリンク

再帰SQLを使って歯抜けの日付データを取得

処理が自動実行(バッチ処理)で実行された日付を管理しているテーブルから、処理が実行されなかった日(歯抜けの日付データ)を抜き出す必要があったのでSQLを作ってみました。

歯抜けの日付けデータを取得するSQL

まずは長くなるSQLに「共通テーブル式」を使ってクエリに名前をつけます。

上記のSQLで行くとWITH cal_info ASがその部分にあたります。

その中に「再帰SQL」を使って指定された期間の日付データを作成します。

これで「cal_info」には2013/04/25から2013/05/10までの連続した日付のデータが選択されます。

最後に選択された日付データをチェックをしたいテーブルの日付でLEFT OUTER JOIN(左外部結合)をすれば「日付抜けをチェックするテーブル」で「cal_info」の日付が存在しない日がNULLで取得されます。

そのNULLになった日が「日付抜けをチェックするテーブル」に存在しない日付になります。

実行結果

カレンダー日付チェック日付
2013/04/252013/04/25
2013/04/262013/04/26
2013/04/272013/04/27
2013/04/28NULL
2013/04/29NULL
2013/04/30NULL
2013/05/012013/05/01
2013/05/022013/05/02
2013/05/032013/05/03
2013/05/04NULL
2013/05/05NULL
2013/05/06NULL
2013/05/07NULL
2013/05/08NULL
2013/05/09NULL
2013/05/10NULL
タイトルとURLをコピーしました