トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
9-7 行事の間に宿泊した客を取得その2
SQLパズル
宿泊者テーブル 行事テーブル
Name CheckIN CheckOut 行事名 StartDay EndDay
---- ---------- ---------- ------ ---------- ----------
Al 1999/02/01 1999/11/01 元旦 1999/01/01 1999/01/01
Ben 1999/12/10 1999/12/20 正月 1999/01/01 1999/01/03
Ed 1999/01/01 1999/11/11 七夕 1999/07/07 1999/07/07
Joe 1999/02/01 1999/02/28 大晦日 1999/12/31 1999/12/31
Ken 1999/12/01 1999/12/25
宿泊者テーブルと、行事テーブルから
行事の間に宿泊した客の数を出力する。
出力結果
行事名 宿泊者数
------ --------
元旦 1
正月 1
七夕 2
大晦日 0
プログラマのためのSQL第2版の13章[betweenとOverLaps述語]を参考にさせていただきました
データ作成スクリプト
前のSQLパズルと同じ
SQL
select a.行事名,
(select count(*) from 宿泊者 b
where a.StartDay <= b.CheckOut and b.CheckIn <= a.EndDay) as 宿泊者数
from 行事 a
order by a.StartDay,a.EndDay;
解説