我有一张如下表:
GroupID ParentID Type
1 ABC IND
1 ABC IND
1 CDE ORD
1 EFG STD
2 ZZZ IND
2 ZZZ IND
2 ZZZ IND
3 YYY COR
3 YYY COR
我需要排除同一组中具有相同父ID且类型为IND或COR的记录。但是我需要保留那些具有不同父ID并且类型不是IND或COR的组。
所以我想得到的结果如下:
GroupID ParentID Type
1 ABC IND
1 ABC IND
1 CDE ORD
1 EFG STD
不知怎的,我正在考虑使用
Rank () over(partition by GroupID order by ParentID)
,但它不会给我我想要的结果。
有什么想法? PS:这张表有500万条记录。寻找有效的方法来处理它。
由于
答案 0 :(得分:1)
以下为您提供了要排除的groupID列表
SELECT GroupID
FROM
(
SELECT GroupID,
COUNT(DISTINCT ParentID) AS PCount, COUNT(DISTINCT TypeCode) as TCount,
MAX(TypeCode) AS tCode
FROM tablename
GROUP BY GroupID
) t
WHERE PCount = 1 AND TCount = 1
AND (tCode = 'IND' OR tCode = 'COR')
现在选择其他所有内容
SELECT *
FROM tableName
WHERE GroupID not in (
SELECT GroupID
FROM
(
SELECT GroupID,
COUNT(DISTINCT ParentID) AS PCount, COUNT(DISTINCT TypeCode) as TCount,
MAX(TypeCode) AS tCode
FROM tablename
GROUP BY GroupID
) t
WHERE PCount = 1 AND TCount = 1
AND (tCode = 'IND' OR tCode = 'COR')
)
用小提琴测试 - > http://sqlfiddle.com/#!3/f1d4f/15/0
答案 1 :(得分:0)
怎么样
1 ABC IND
在结果集中?这里的类型是IND,你提到结果集不应该有IND或COR类型吗?