2011-04-27 8 views
12

me gustaría tener un equivalente del servidor SQL de la PostgreSQL distinct on()SQL de PostgreSQL distinta de()

a b 
---- 
1 1 
1 2 
2 2 
2 1 
3 3 

select distinct on (a) * 
from my_table 

a b 
---- 
1 1 
2 2 
3 3 

lo que podía hacer en SQL Server:

select a, min(b) -- or max it does not matter 
from my_table 
group by a 

Sin embargo, en los casos en que hay muchas columnas y la consulta es ad hoc, es muy tedioso de hacer. ¿Hay una manera fácil de hacerlo?

+0

¿qué versión de SQL Server? – Lamak

+0

@Lamak Sql Server 2008 –

Respuesta

7

Puede probar ROW_NUMBER, pero puede afectar su rendimiento.

;WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr 
    FROM my_table 
) 
SELECT * 
FROM CTE 
WHERE Corr = 1 
+0

¿cómo hacer esto si no tengo la opción de usar con CTE? –

Cuestiones relacionadas