2011-11-07 18 views
6

Così ho una tabella come questa:SQL: SELECT DISTINCT di una colonna ignorando altre colonne

--------- 
id, keyid 
--------- 
1, 3 
1, 5 
1, 6 
2, 1 
2, 1 
2, 3 
4, 1 

I want the output of the query to be 
1,3 
2,1 
4,1 

Se uso selezionare distinti (id, keyid) dalla tabella si applica la distinta sulla coppia di id , keyid e non solo id da solo.

risposta

13
select id, min(keyid) from tbl group by id 
+2

Questa è la strada da percorrere. In genere è molto meglio comprendere almeno questo modo di pensare invece di applicare distinti dappertutto. – stefan

1

Se si desidera il valore minimo di KeyId per ogni ID, la risposta dell'utente 194076 funzionerà sicuramente.

Se si desidera che il primo valore che si verificano di KeyID per ciascun ID, è possibile utilizzare:


WITH CTE AS (
    SELECT Id, KeyId, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS RN 
    FROM tbl 
) 

SELECT Id, KeyId FROM CTE WHERE RN = 1 

Ho provato sia con STATISTICS IO e STATISTICS TIME e sembrano essere la stessa in termini di prestazioni, in modo da dipende davvero da quali sono i tuoi bisogni esatti.

Problemi correlati