1

選択によって返される次のデータセットがあります。

date          code     
23/01/2012    AA123
24/01/2012    AA123
29/01/2012    AA123
06/07/2012    AA123
17/02/2012    BB123
20/02/2012    BB123
04/06/2012    BB123

select は、各コードのすべてのデータを提供します (コード順)。各コードの最新の 2 つの日付の行のみを返したいです。返されるデータは次のようになります。

date          code     
23/01/2012    AA123
24/01/2012    AA123
17/02/2012    BB123
20/02/2012    BB123

望ましい結果を得るにはどうすればよいですか? 私は使用しようとしました

select date, code
from table
where x,y,z
and rownum < 2 
order by code desc;

ただし、上位2行のみを返します-

4

2 に答える 2

6
select
  date,
  code
from
    (select 
      date, 
      code,
      dense_rank() over (partition by code order by date) as rank
    from 
      table
    where 
      x,y,z)
where
  rank <= 2
order by 
  code desc;

の代わりにまたはdense_rankを使用することもできます。それらにはわずかな違いがあるため、一方が他方よりもニーズに適している場合があります。rankrow_number

于 2012-10-07T11:39:31.500 に答える
0

あなたは多分これを使うことができます。私はテストしませんでした。

select date,code from table A where (select Count(*) from table B where A.code=B.code AND A.date > B.date ) < 2 
于 2012-10-07T11:43:02.843 に答える