トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

2-3-4 範囲の重複チェック

SQLパズル

Table1のStartTimeとEndTimeの、少なくとも片方が
別レコードのStartTime以上EndTime以下であれば、StartTimeとEndTimeを取得する。


SQL

select StartTime,EndTime
from Table1 a
where exists(select 1 from Table1 b
              where b.RowID != a.RowID
                and (a.StartTime between b.StartTime and b.EndTime
                  or a.EndTime   between b.StartTime and b.EndTime));


解説

自己結合した際に、同一レコードを対象外にする方法には、
プライマリキーを比較する方法がありますが、RowIDを比較する方法もあります。