过滤掉 CTE 中的重复项

问题描述 投票:0回答:1

这个cte中的数据如下所示:

h_pit as (
    select
        *
    from "h_pit"
)
id       hash_key1.       hash_key2         business_key               date             value
1        12233               234                     123               12-01-2000        5
3        33333               456                     091               13-01-2000        6
7        FFFFFF              456                     NULL              16-01-2000        7
9        FFFFFF              888                     NULL              6-01-2000         7

hash_key2 有一些重复项。对于每个重复的 hash_key2

hash_key1 = FFFFFF
business_key is NULL

我想在此之后创建一个新的 cte,丢弃 hash_key2 重复项,其中 hash_key 1 = FFFFF 且business_key 为 NULL,并且 hash_key 2 重复。我怎样才能实现这个目标?

这就是我首先收集有关重复 hash_key2 的信息的方式:

SELECT h_application_2
  FROM h_pit
  GROUP BY h_application_2
  HAVING COUNT(*) > 1

请注意,在某些情况下

hash_key1 = FFFFFF
business_key is NULL

但是 hash_key2 不是重复的,所以我不想删除它们

sql postgresql amazon-redshift common-table-expression window-functions
1个回答
0
投票

参见示例

select t1.*
from h_pit t1
left join h_pit t2 on t1.hash_key2=t2.hash_key2
  and t1.hash_key1='FFFFFF' and t1.business_key is null
  and t2.hash_key1<>'FFFFFF' and t2.business_key is not null
where t2.id is null

在过滤器之前加入结果(WHERE)

id hash_key1 hash_key2 business_key 日期 价值 id hash_key1 hash_key2 业务_密钥 日期 价值
1 12233 234 123 2000-01-12 5
3 33333 456 091 2000-01-13 6
7 FFFFFF 456 2000-01-16 7 3 33333 456 091 2000-01-13 6
9 FFFFFF 888 2000-01-06 7

示例

© www.soinside.com 2019 - 2024. All rights reserved.