Oracle を使用しているため、次のようなウィンドウ関数を使用できるはずですrow_number()
。
select location,
read_time,
read_amt,
add_dtm
from
(
select location, read_time, read_amt, add_dtm,
row_number() over(partition by location, to_char(add_dtm, 'MM-YYYY')
order by add_dtm desc) rn
from yourtable
)
where rn = 1
SQL Fiddle with Demoを参照してください。
max(add_dtm)
または、 for eachを取得するサブクエリを使用して、location
その結果をテーブルに結合することもできます。
select t1.location, t1.read_time,
t1.read_amt, t1.add_dtm
from yourtable t1
inner join
(
select location, max(add_dtm) MaxDate
from yourtable
group by location, to_char(add_dtm, 'MM-YYYY')
) t2
on t1.location = t2.location
and t1.add_dtm = t2.maxdate
SQL Fiddle with Demoを参照してください。
これらのクエリの両方の鍵は、データを月と年でグループ化して最大の日付を取得することです。