从分区获取不应该在其他分区中的特定项目

时间:2016-06-20 10:32:21

标签: sql oracle partition

我有下表 -

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,我将有2个项目B和C,其中C2> C3。

理想情况下,对于G1组,B较老,而对于G2组,C较旧;

但是我不想为G1提取B,因为它是G2的最新版本。于是 输出应该只是C。

任何人都可以帮助我如何实现这一目标?

1 个答案:

答案 0 :(得分: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