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

7-31 最も近い日を取得

SQLパズル

Dayテーブルから、
現在日(sysdate)に最も近い日を取得する。


データ作成スクリプト

create table DayTable(day date);

insert into DayTable values(sysdate-6);
insert into DayTable values(sysdate-2);
insert into DayTable values(sysdate+2);
insert into DayTable values(sysdate+6);
commit;


SQL

--■■■相関サブクエリを使う方法■■■
select day from DayTable a
 where abs(trunc(a.day)-trunc(sysdate)) =
(select min(abs(trunc(b.day)-trunc(sysdate)))
   from DayTable b);

--■■■分析関数を使う方法■■■
select day
from (select day,
          abs(trunc(day)-trunc(sysdate)) as Diff,
      min(abs(trunc(day)-trunc(sysdate))) over() as MinDiff
      from DayTable)
where Diff = MinDiff;

--■■■rank関数を使う方法■■■
select day
from (select day,
      rank() over(order by abs(trunc(day)-trunc(sysdate))) as Rn
        from DayTable)
 where Rn =1;


解説

trunc関数を使って、時間情報を切り捨てて、
abs関数を使って、日付の差を求めてます。