SQL: выберите отличные от одного столбца, игнорируя другие столбцы - PullRequest
6 голосов
/ 08 ноября 2011

Итак, у меня есть такая таблица:

---------
id, keyid
---------
1,  3
1,  5
1,  6
2,  1
2,  1
2,  3
4,  1

I want the output of the query to be
1,3
2,1
4,1

Если я использую select Different (id, keyid) из таблицы, он применяет отличные к паре id, keyid, а не только к одному id.

Ответы [ 2 ]

13 голосов
/ 08 ноября 2011
select id, min(keyid) from tbl group by id
1 голос
/ 08 ноября 2011

Если вам нужно минимальное значение KeyId для каждого идентификатора, то ответ user194076 определенно сработает.

Если вам нужно первое встречающееся значение KeyId для каждого Id, вы можете использовать:


WITH CTE AS (
   SELECT Id, KeyId, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS RN
   FROM tbl
)

SELECT Id, KeyId FROM CTE WHERE RN = 1

Я протестировал оба, используя STATISTICS IO и STATISTICS TIME, и они кажутся одинаковыми с точки зрения производительности, поэтому действительно зависит от ваших точных потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...