トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
3-6 空き時間を探索してinsert
SQLパズル
TimeTableのVal1(Date型)に、2005年8月1日16時20分を第一候補とした時間を登録する
ただし同一時刻の登録データは3件までとし、
既に3件のデータが存在した場合は、10分後の時刻を次の候補として処理を再帰的に行う
データ作成スクリプト
create table TimeTable(Val1 date);
SQL
insert into TimeTable(Val1)
values(
case when (select count(Val1) from TimeTable
where Val1= to_date('2005/08/01 16:20','YYYY/MM/DD HH24;MI')
and RowNum <= 3) < 3
then to_date('2005/08/01 16:20','YYYY/MM/DD HH24;MI')
else (select min(Val1) + 10/24/60 from TimeTable a
where Val1 >= to_date('2005/08/01 16:20','YYYY/MM/DD HH24;MI')
and (select count(b.Val1) from TimeTable b
where b.Val1=a.Val1 + 10/24/60
and RowNum <= 3) < 3)
end);
解説
第一候補の時間に登録可能かを調べて、
登録可能の場合は、その時間となります
第一候補の時間に登録不可の場合は、Val1が最大のデータを番兵とした、
第一候補以降で登録可能な時間の探索を行います