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

公開日: : 最終更新日:2013/12/11 SQL Server , ,

再帰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/25 2013/04/25
2013/04/26 2013/04/26
2013/04/27 2013/04/27
2013/04/28 NULL
2013/04/29 NULL
2013/04/30 NULL
2013/05/01 2013/05/01
2013/05/02 2013/05/02
2013/05/03 2013/05/03
2013/05/04 NULL
2013/05/05 NULL
2013/05/06 NULL
2013/05/07 NULL
2013/05/08 NULL
2013/05/09 NULL
2013/05/10 NULL
スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 13 follow us in feedly

関連記事

SQLで日付範囲の重複をチェックする

SQLで日付範囲の重複をチェックする SQLで日付範囲の重複をチェックする必要が出たので調査しまし

記事を読む

ORDER BYでNULLのカラムを最後に表示

ORDER BYでNULLのカラムを最後に持ってくる SQLで何も考慮せずに「ORDER BY」す

記事を読む

GROUP BYとHAVINGで最新日付データを取得する

GROUP BYとHAVINGで最新日付データを取得する 社員マスタなどで最新のレコードのみを取得

記事を読む

2つのテーブルを結合して値を更新するSQL

2つのテーブルを結合して値を更新するSQL テーブルAの値をテーブルBの値で上書き(更新)するSQ

記事を読む

@@ROWCOUNTで処理した件数を取得する

@@ROWCOUNTは直前に処理した件数を取得するための関数 SQLServerでは実行したSQL

記事を読む

SQLServer

SQLServerでクライアントのIPアドレスを取得する

SQLServerでクライアントのIPアドレスを取得する SQLを発行したクライアントのIPアドレ

記事を読む

CASE WHENを使ってSQLでIF文を使わずに条件を分岐する

SQLでIFを使わずに条件分岐する SQLでIFを書けばWHERE句の内容を変えて検索できますが、

記事を読む

SQLServer

bcpコマンドを使ってBULK INSERT用のフォーマットファイルを出力する

bcpコマンドを使ってBULK INSERT用のフォーマットファイルを出力する bcpコマンドを使

記事を読む

テーブルにユニークインデックス(UNIQUE INDEX)を作成する

テーブルにユニークインデックス(UNIQUE INDEX)を作成 すでに作成したテーブルにユニ

記事を読む

CASE WHEN を使って条件ごとの件数を取得する

CASE WHEN を使って条件ごとの件数を取得する あるテーブルに状態を表すフラグを持たせること

記事を読む

SQLでビット演算を行う

SQLServerでのビット演算 SQLServerのT-SQLでビ

TOP句で変数を使ってSQLを1行にする

TOP句で変数を使ってSQLを1行にする TOP句を使って複雑なSQ

集計関数COUNT()でのNULLの扱い

集計関数COUNT()でのNULLの扱いは注意が必要 集計関数の

ISNULL()関数を使ってSQLでIF文を使わずに条件を分岐する

ISNULLをIF文の代わりに使ってみる SQLでIFを書けばWHE

SQLサーバ
連番中で 「歯抜け」の番号を見つけ出すSQL

テーブル内の連番の歯抜け番号を探す よくある処理でテーブルに設定され

→もっと見る



PAGE TOP ↑