【问题标题】:Select * where col1 is local max on each col2选择 * 其中 col1 是每个 col2 的局部最大值
【发布时间】:2013-01-29 08:49:11
【问题描述】:

我有几张类似的桌子。我需要通过*选择它们。
我想获取revnr 是每个docid 中最高行的行列表。

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以在子查询中为每个docID 获取revnr 的最新值,然后其结果将连接到表本身。

    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);
    

    【讨论】:

    • 我有一个关于 3 个 cols、docid、revnr 和另外一个的主索引。
    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多