前提・実現したいこと
下記のようなテーブルがあり
検索した当日から次回の長期休暇の開始日と終了日を取得するselect文を作りたいのですが
よい取得方法がありましたらご教授ください。
カレンダーテーブル
ID | 休日区分 | date |
---|---|---|
1 | 2019/7/19 | |
2 | 夏休み | 2019/7/20 |
3 | 夏休み | 2019/7/21 |
-- | -- | -- |
a | 夏休み | 2019/8/30 |
a+1 | 夏休み | 2019/8/31 |
a+2 | 2019/9/1 | |
-- | -- | -- |
b | 2019/12/19 | |
b+1 | 冬休み | 2019/12/20 |
b+2 | 冬休み | 2019/12/21 |
-- | -- | -- |
c | 冬休み | 2020/1/6 |
c+1 | 冬休み | 2020/1/7 |
c+2 | 2020/1/8 | |
-- | -- | -- |
d | 2020/3/27 | |
d+1 | 春休み | 2020/3/28 |
-- | -- | -- |
e | 春休み | 2020/4/6 |
e+1 | 2020/4/7 | |
-- | -- | -- |
f | 2020/7/20 | |
f+1 | 夏休み | 2020/7/21 |
-- | -- | -- |
g | 夏休み | 2020/8/31 |
g+1 | 2020/9/1 |
例1:2019/4/1に検索した場合
夏休み開始日2019/7/20
夏休み終了日2019/8/31
冬休み開始日2019/12/20
冬休み終了日2020/1/7
春休み開始日2020/3/27
春休み終了日2020/4/6
例1:2019/8/1に検索した場合
冬休み開始日2019/12/20
冬休み終了日2020/1/7
春休み開始日2020/3/27
春休み終了日2020/4/6
夏休み開始日2020/7/20
夏休み終了日2020/8/31
試したこと
各休みに対してSQLを実行する
検索日をsysdateより参照しその年の夏休み開始日終了日を検索する。(dateで期間指定,IDのmax,minを取る)
この時検索日が開始日を過ぎていた場合は、翌年の夏休み開始日終了日を取得する。
検索日をsysdateより参照しその年の春休み開始日終了日を検索する。(dateで期間指定,IDのmax,minを取る)
この時検索日が開始日を過ぎていた場合は、翌年の春休み開始日終了日を取得する。
検索日をsysdateより参照しその年の12月から翌年2月までの期間を指定して冬休みを取る(dateで期間指定,IDのmax,minを取る)
この時検索日が開始日を過ぎていた場合は、翌年の冬休み開始日終了日を取得する。
補足情報(FW/ツールのバージョンなど)
DBの種類:oracle