MYSQL来自多个表连接的前N行

d k*_*d k 5 mysql sql greatest-n-per-group

比如,sql server 2005中有top关键字,如果我在多个表上加入并想要检索每个ID /列的极值,如何在mysql中选择前1行.限制限制了号码.行返回,所以它无法解决我的问题.

Qua*_*noi 4

SELECT  v.*
FROM    document d
OUTER APPLY
        (
        SELECT  TOP 1 *
        FROM    version v
        WHERE   v.document = d.id
        ORDER BY
                v.revision DESC
        ) v
Run Code Online (Sandbox Code Playgroud)

或者

SELECT  v.*
FROM    document d
LEFT JOIN
        (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY v.id ORDER BY revision DESC)
        FROM    version
        ) v
ON      v.document = d.id
        AND v.rn = 1
Run Code Online (Sandbox Code Playgroud)

如果您的文档通常很少修订并且您需要选择全部或几乎所有文档,则后者更有效;如果文档有很多修订或者您只需要选择一小部分文档,则前者更有效。

更新:

抱歉,没注意到问题是关于的MySQL

在 中MySQL,您可以这样做:

SELECT  *
FROM    document d
LEFT JOIN
        version v
ON      v.id = 
        (
        SELECT  id
        FROM    version vi
        WHERE   vi.document = d.document
        ORDER BY
                vi.document DESC, vi.revision DESC, vi.id DESC
        LIMIT 1
        )
Run Code Online (Sandbox Code Playgroud)

创建一个复合索引version (document, revision, id)以使其快速工作。