Как заменить строки с приоритетом в MySQL SELECT? - PullRequest
0 голосов
/ 22 августа 2011

Например:

code, attr, val, precedence 
(0, 'key', 'value1', 1 )
(1, 'key', 'value2', 1 )
(2, 'key', 'value3', 1 )
(3, 'key2', 'value1', 1 )
(4, 'key3', 'value1', 1 )
(5, 'key', 'nothis', 2 )
(6, 'key', 'final_value', 3 )

Я хочу получить что-то вроде этого:

(6, 'key', 'final_value', 3 )
(3, 'key2', 'value1', 1 )
(4, 'key3', 'value1', 1 )

Как это сделать, что в MySQL?

1 Ответ

2 голосов
/ 22 августа 2011

Создать соединение со списком максимальных приоритетов для идентификатора. Примерно так:

SELECT *
FROM a
    INNER JOIN (SELECT attr, MAX(precedence) p FROM a) m
      ON m.attr = a.attr AND m.p = a.precedence
  GROUP BY a.attr;

группировка только по одной строке на атрибут; можно заменить на DISTINCT в предложении SELECT

...