就像,在 sql server 2005 中有 top 关键字,如果我在多个表上加入并且想要检索每个 ID/列的极端值,如何在 mysql 中选择前 1 行。限制限制没有。行返回,所以它不能解决我的问题。
问问题
7805 次
2 回答
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
或者
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
如果您的文档通常只有很少的修订并且您需要选择所有或几乎所有文档,则后者效率更高;如果文档有很多修订版或者您只需要选择一小部分文档,则前者效率更高。
更新:
抱歉,没注意到问题是关于MySQL
.
In MySQL
, you do it this way:
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
)
Create a composite index on version (document, revision, id)
for this to work fast.
于 2010-02-12T13:54:09.753 回答
0
如果我理解正确,top 也不能解决你的问题。top 完全等同于limit。你正在寻找的是聚合函数,如果你想要极端的话,比如 max() 或 min()。例如:
select link_id, max(column_a), min(column_b) from table_a a, table_b b
where a.link_id = b.link_id group by link_id
于 2010-02-12T08:38:34.500 回答