とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub

SQLにおける期間重複チェックの考え方


データベースに登録された一定期間を表すデータに
指定した日付がかぶっているかを確認するSQLを作成する要件は意外と多いです。

実際の業務、小売業のデータマートをサンプルとして考えてみます。
とまとあんらいぷスーパーでは、
商品データを登録する時
商品マスタに
その商品を販売する期間と金額を設定しています。

    商品マスタ
  1. 商品ID
  2. 適用開始日
  3. 適用終了日
  4. 商品名
  5. 金額

商品マスタの金額とは別に、セール(特売)期間テーブルが存在し
セール期間中の金額を設定できます。

    特売期間テーブル
  1. 商品ID
  2. 適用開始日
  3. 適用終了日
  4. 金額

データ登録時の制約として、
商品マスタには同一商品IDの適用開始日が
既に存在する適用開始日~適用終了日の間になるような指定はできません。

【商品マスタ】

商品ID 適用開始日 適用終了日 商品名 金額
登録OK 0001 2013-03-01 2013-08-31 とまとM 258
登録時にエラー 0001 2013-04-01 2013-07-31 とまとM 218

特売期間テーブルに登録したデータは
商品マスタの適用開始日~終了日の期間と重複する場合
特売期間テーブルの金額を優先します。

【特売期間テーブル】

商品ID 適用開始日 適用終了日 金額
商品マスタより
優先される
0001 2013-04-01 2013-07-31 198

さて、特売期間の登録時に、商品マスタのように
特売期間の重複が発生するエラーチェックを行なっていなかった事が発覚しました。

【特売期間テーブル】

商品ID 適用開始日 適用終了日 金額
商品マスタより
優先される
0001 2013-04-01 2013-07-31 198
特売日がかぶってる 0001 2013-04-15 2013-06-31 158


特売期間とはいえ、特売金額が同じ日に複数あるのは問題なので
特売期間テーブルも商品マスタと同様に
同一商品IDによる期間重複制限を行います。

その前に、既に登録している特売期間のうち
特売期間がかぶっているデータの洗い出しを行わなければいけません。

というようなシチュエーションです。
期間重複しているデータを洗い出す方法を考えてみます。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ

次のページ

FC2Ad