SQL Server эквивалент PostgreSQL отличается от () - PullRequest
19 голосов
/ 27 апреля 2011

Я хотел бы иметь Sql Server, эквивалентный 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

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

Ответы [ 2 ]

13 голосов
/ 27 апреля 2011

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

10 голосов
/ 23 апреля 2018

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

SELECT part.*
FROM (  SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) Corr
    FROM my_table) part
WHERE part.Corr = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...