I would like to have a Sql Server equivalent of the PostgreSQL distinct on ()
a b
----
1 1
1 2
2 2
2 1
3 3
select distinct on (a) *
from my_
You can try ROW_NUMBER
, but it can affect your performance.
;WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr
FROM my_table
)
SELECT *
FROM CTE
WHERE Corr = 1
In addition to the accepted answer, you can avoid using two sentences and use a sub select like this
SELECT part.*
FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr
FROM my_table) part
WHERE part.Corr = 1