Выберите *, где col1 - местный максимум на каждом col2

У меня есть несколько таблиц simliar. Мне нужно выбрать их через * .
Я хотел бы получить список строк, где revnr является самым высоким в каждом docid .

Моя проблема здесь в том, что я не знаю, как получить локальный max (revnr) для каждого docid .

Я использую MySQL, но я бы предпочел общее решение sql.

Благодаря!

1
nl ja de

1 ответы

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

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  docID, MAX(revnr) max_val
            FROM    tableName
            GROUP   BY docID
        ) b ON  a.docID = b.docID AND
                a.revnr = b.max_val

for better performance, add an INDEX on both columns: docID and revnr

ALTER TABLE tableName ADD INDEX (docID, revnr);
3
добавлено
У меня есть первичный индекс на 3 cols, docid, revnr и еще один.
добавлено автор Filip Haglund, источник
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)