Ответ 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
Я хотел бы иметь эквивалент 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
Но в тех случаях, когда имеется много столбцов, а запрос является специальным, очень утомительно. Есть ли простой способ сделать это?
Вы можете попробовать 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