选择*其中col1是每个col2的局部最大值

时间:2013-01-29 08:49:11

标签: mysql sql join greatest-n-per-group

我有一些simliar表。我需要通过*选择它们 我想获得一个列表,其中revnr是每个docid中最高的行。

我的问题是,我不知道如何为每个max(revnr)获取本地docid

我正在使用MySQL,但我更喜欢通用的SQL解决方案。

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以在子查询中为每个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

为了获得更好的效果,请在两列上添加INDEXdocIDrevnr

ALTER TABLE tableName ADD INDEX (docID, revnr);