2016-06-20 5 views
1

すべきではないパーティションから特定のアイテムをゲット -私はテーブルの下にある他のパーティションに

ID type group_name creation_date 1 A G1 C1 2 B G2 C2 3 C G2 C3 4 B G1 C4

そのタイプのアイテムは、最新のアイテムである場合、私は、各グループ内で、古いタイプの項目を抽出したいのですが、他のパーティション、それから私はそれを抽出しません。

したがって、G1の場合、2つのアイテムAとBを持ちます。C1> C4
G2の場合、C2とC3の2つのアイテムがあります。

理想的には、Bは、グループG1のための古いであり、Cは、グループG2

ため古いですが、私は、それはG2のための最新のものであるため、G1のためのBを抽出する必要はありません。したがって、 の出力はCのみでなければなりません。

どのように私はこれを達成することができますか?

+0

あなたが行 '5、D、G3、C5'と' 6、D、G4を持っている場合C5'、どうなりますか(同じタイプと作成日ですが、グループ名とIDは異なります)? – MT0

+0

各グループについて、最新のものを除くすべてのアイテムを抽出したい。私はグループG3とG4を持っている2行を持っている場合、それらの両方が彼ら自身のグループのための最新ですので、私はそれらを抽出しません – Neha

答えて

0

クエリ

SELECT DISTINCT 
     type 
FROM (
    SELECT type, 
     rnk, 
     COUNT(CASE rnk WHEN 1 THEN 1 END) OVER (PARTITION BY type) AS ct 
    FROM (
    SELECT type, 
      RANK() OVER (PARTITION BY group_name ORDER BY creation_date DESC) AS rnk 
    FROM table_name 
) 
) 
WHERE rnk > 1 AND ct = 0; 

出力

TYPE 
---- 
C 
関連する問題