[英]SQL How to filter table with values having more than one unique value of another column
我有如下所示的數據表客戶:
ID | Sequence No |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
2 | 1 |
2 | 1 |
3 | 1 |
3 | 2 |
我想過濾該表,以便僅保留具有超過 1 個不同序列號計數的 ID。
預期 output:
ID | Sequence No |
1 | 1 |
1 | 2 |
1 | 3 |
3 | 1 |
3 | 2 |
我試過了
select ID, Sequence No
from Customers
where count(distinct Sequence No) > 1
order by ID
但我遇到了錯誤。 如何解決這個問題?
使用解析函數,我們可以嘗試:
WITH cte AS (
SELECT *, MIN([Sequence No]) OVER (PARTITION BY ID) min_seq,
MAX([Sequence No]) OVER (PARTITION BY ID) max_seq
FROM Customers
)
SELECT ID, [Sequence No]
FROM cte
WHERE min_seq <> max_seq
ORDER BY ID, [Sequence No];
我們通過斷言給定ID
的最小和最大序列號不同來檢查序列號的不同計數。 上述查詢可以受益於以下索引:
CREATE INDEX idx ON Customers (ID, [Sequence No]);
這樣可以更快地查找最小值和最大值。
您可以使用以下查詢獲得所需的結果。 這與您嘗試的類似 -
樣本表和數據
Declare @Data table
(Id int, [Sequence No] int)
Insert into @Data
values
(1 , 1 ),
(1 , 2 ),
(1 , 3 ),
(2 , 1 ),
(2 , 1 ),
(2 , 1 ),
(3 , 1 ),
(3 , 2 )
詢問
Select * from @Data
where ID in(
select ID
from @Data
Group by ID
Having count(distinct [Sequence No]) > 1
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.