トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-5 グループ化とLast関数
SQLパズル
tbl1テーブル
rec_date data
------------------- ----
2005/01/10 13:45:23 10
2005/01/10 18:56:08 30
2005/01/10 22:16:48 20
2005/01/11 08:32:08 80
2005/01/11 12:45:48 60
2005/01/11 16:20:14 80
2005/01/11 23:02:02 20
各日付のdataが最大のレコードを出力する。
ただし、同日のdataの最大値が複数ある場合は、時刻が最大のレコードを出力する。
出力結果
rec_date data
------------------- ----
2005/01/10 18:56:08 30
2005/01/11 16:20:14 80
データ作成スクリプト
create table tbl1(
rec_date date,
data number(2));
insert into tbl1 values(to_date('2005/01/10 13:45:23','yyyy/mm/dd hh24/mi/ss'),10);
insert into tbl1 values(to_date('2005/01/10 13:45:23','yyyy/mm/dd hh24/mi/ss'),10);
insert into tbl1 values(to_date('2005/01/10 18:56:08','yyyy/mm/dd hh24/mi/ss'),30);
insert into tbl1 values(to_date('2005/01/10 22:16:48','yyyy/mm/dd hh24/mi/ss'),20);
insert into tbl1 values(to_date('2005/01/11 08:32:08','yyyy/mm/dd hh24/mi/ss'),80);
insert into tbl1 values(to_date('2005/01/11 12:45:48','yyyy/mm/dd hh24/mi/ss'),60);
insert into tbl1 values(to_date('2005/01/11 16:20:14','yyyy/mm/dd hh24/mi/ss'),80);
insert into tbl1 values(to_date('2005/01/11 23:02:02','yyyy/mm/dd hh24/mi/ss'),20);
commit;
SQL
select
to_char(max(rec_date) keep(dense_rank Last order by data),
'yyyy/mm/dd hh24/mi/ss') as rec_date,
max(data) as data
from tbl1
group by trunc(rec_date)
order by rec_date;
解説
trunc関数で日付の時間情報を切り捨てて、グループ化してます。