-3

毎月の最大 add_dtm を取得する必要があります。これを設定しています。

location, read_time,         read_amt, add_dtm
1,        2/7/2013 9:00:00,  5,        2/8/2013 6:00:00
1,        3/20/2013 8:00:00, 5,        3/20/2013 6:30:00
1,        2/20/2013 8:20:00, 5,        2/20/2013 6:35:00
1,        2/7/2013 9:00:00,  5,        2/8/2013 6:00:00

基本的に、結果の2行目と3行目が必要です。

4

1 に答える 1

1

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を参照してください。

これらのクエリの両方の鍵は、データを月と年でグループ化して最大の日付を取得することです。

于 2013-04-02T18:39:13.557 に答える