我有下表 -
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。
任何人都可以帮助我如何实现这一目标?
答案 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