1

私が持っているアイテムをランク付けするテーブルがあります。

特定のアイテムの上位 2 ランクのみを取得するクエリが必要です。ランクが連続していない可能性があります。

少なくとも 2 ランクのアイテムを取得する必要があります。2 つのアイテムでも同じランクになります。

これが私のテーブルのスナップショットです。

Item Id Supp Id Rank
1   2   2
1   1   7
1   7   5
1   9   11
2   67  4
2   9   14
2   10  14
2   34  4
2   25  3
2   60  3
2   79  5

私の要件は、2を入力すると、以下のような結果が得られるはずです

Item Id Supp_id Rank
2   25  3
2   60  3
2   67  4
2   34  4

私はオラクル10gバージョンを使用しています。

4

1 に答える 1

1

アプローチの1つとして、次のように実行できます。ここでは、dense_rank() over()分析関数を使用して、順序付けられたrank行グループ内の行にランクを割り当てています。

select t.item_id
     , t.supp_id
     , t.rank
  from (select item_id
             , supp_id
             , rank
             , dense_rank() over(partition by item_id 
                                     order by rank) as rn
          from t1
          where item_id = 2 
         ) t
where t.rn <= 2

結果:

   ITEM_ID    SUPP_ID       RANK
---------- ---------- ----------
         2         25          3 
         2         60          3 
         2         67          4 
         2         34          4 

SQLFiddle デモ

于 2013-10-28T17:17:25.677 に答える