Подтвердить что ты не робот

Эквивалент SQL Server PostgreSQL, отличный от()

Я хотел бы иметь эквивалент Sql-сервера PostgreSQL distinct on ()

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

Я мог бы сделать в SQL Server:

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

Но в тех случаях, когда имеется много столбцов, а запрос является специальным, очень утомительно. Есть ли простой способ сделать это?

4b9b3361

Ответ 1

Вы можете попробовать ROW_NUMBER, но это может повлиять на вашу производительность.

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