Выберите строку с наивысшим приоритетом - PullRequest
2 голосов
/ 20 сентября 2011

Допустим, у меня есть таблица с тремя столбцами, key, value и priority с уникальным ключом (key, priority).

Я хочу выбрать всеkey / value пар, где priority для этого ключа выше, чем любой другой приоритет для того же key.

Например:

key | value   | priority
----------------------
'a' | 'Alice' |   5 
'a' | 'Aaron' |   10
'b' | 'Bob'   |   1

Должен вернуть:

key | value
-------------
'a' | 'Aaron'
'b' | 'Bob'

Какой эффективный способ написания такого запроса?

Ответы [ 3 ]

5 голосов
/ 20 сентября 2011
select [key],
       value
from (select [key],
             value,
             row_number() over(partition by [key] 
                               order by priority desc) as rn
      from YourTable) as T
where rn = 1
3 голосов
/ 20 сентября 2011
    SELECT a.`key`,
           a.`value`
      FROM tbl a
INNER JOIN (SELECT MAX(priority) priority,
                   `key`
              FROM tbl
          GROUP BY `key`) b ON a.`key` = b.`key`
                           AND a.priority = b.priority

Этот запрос будет работать до тех пор, пока каждый ключ имеет один и только один приоритет с наибольшим значением

0 голосов
/ 20 сентября 2011

Используйте этот SQL:

SELECT key, value 
FROM T1 as t1
JOIN 
(SELECT key, MAX(priority) AS priority 
 FROM T1 as t2 
 GROUP BY key) as t3 
ON t1.key = t3.key AND t3.priority = t1.priority
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...