[英]MYSQL top N rows from multiple table join
比如,sql server 2005中有top關鍵字,如果我在多個表上加入並想要檢索每個ID /列的極值,如何在mysql中選擇前1行。 限制限制了號碼。 行返回,所以它無法解決我的問題。
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
的問題。
在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
)
在version (document, revision, id)
上創建復合索引version (document, revision, id)
以便快速工作。
如果我理解正確,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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.