Выберите одну строку из нескольких групп в одном запросе - PullRequest
0 голосов
/ 19 марта 2019

У меня есть набор строк, который состоит из чего-то вроде этого:

id1           id2          value
--------------------------------
  1             1             50
  2             1             60
  3             1             70
  4             1             40
  5             1             53
 15             2             10
 16             2             19
 17             2             17
 18             2             13
 20             2             14
 40             3             32
 40             3             34
 44             3             54
 40             3             67
 43             3             80

Из этого набора строк я хочу значения id1 для группы id2 с максимальным значением. Примерно так:

id1           id2          value
--------------------------------
  3             1             70
 16             2             19
 43             3             80

Меня интересуют только id1 и id2, столбец значений приведен только для иллюстрации.

Запрос должен выполняться на MariaDB 5.5. Я думал об этом, но до сих пор не нашел спускаемый (и производительный ...) SQL-запрос.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 19 марта 2019
SELECT t.*
FROM sometable t
INNER JOIN (
    SELECT 
       id2,
       MAX(`value`) val
    FROM sometable
    GROUP BY id2
) t2
ON t.`value` = t2.val
   AND t.id2 = t2.id2
0 голосов
/ 20 марта 2019

На ум приходит коррелированный подзапрос:

select t.*
from t
where t.value = (select max(t2.value)
                 from t t2
                 where t2.id2 = t.id2
                );

Для производительности вам нужен индекс на (id2, value).

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