我正试图编写一个查询,当ID重复(由不同的Type值引起(并且重复行中的Code值不匹配时,该查询将为我提供ID。只有两个类型值是可能的,因此只有两个重复值。
例如:
ID | 类型 | 代码 |
---|---|---|
ID 1 | 类型1 | #### |
ID 1 | 类型2 | #### |
ID 2 | 类型1 | #### |
ID 2 | 类型2 | $$$ |
按ID聚合并检查是否获得多个代码(通过比较最小值和最大值或通过计数不同(:
select id, min(code), max(code)
from mytable
group by id
having min(code) <> max(code)
order by id;
根据代码对ID进行排名,因此对于相同的代码,ID的两行都将排名1,如果代码不同,则特定ID的行将排名1和2。稍后,我们可以过滤排名为2的ID,以获得所需的结果。
with temp as(
Select
ID,
rank() over (partition by ID order by code) as rn
from table_name)
select ID from temp where rn = 2