简体   繁体   中英

SQL How to filter table with values having more than one unique value of another column

I have data table Customers that looks like this:

ID | Sequence No |
1  |  1          |
1  |  2          |
1  |  3          |
2  |  1          |
2  |  1          |
2  |  1          |
3  |  1          |
3  |  2          |

I would like to filter the table so that only IDs with more than 1 distinct count of Sequence No remain.

Expected output:

ID | Sequence No |
1  |  1          |
1  |  2          |
1  |  3          |
3  |  1          |
3  |  2          |

I tried

select ID, Sequence No 
from Customers 
where count(distinct Sequence No) > 1
order by ID

but I'm getting error. How to solve this?

Using analytic functions, we can try:

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];

下面演示链接的屏幕截图

Demo

We are checking for a distinct count of sequence number by asserting that the minimum and maximum sequence numbers are not the same for a given ID . The above query could benefit from the following index:

CREATE INDEX idx ON Customers (ID, [Sequence No]);

This would let the min and max values be looked up faster.

You can get the desired result by using the below query. This is similar to what you were trying -

Sample Table & Data

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   )

Query

Select * from @Data 
where ID in(
            select ID
            from @Data 
            Group by ID
            Having count(distinct [Sequence No]) > 1
            )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM