简单SQL问题(MySQL)
我有一个疑问:简单SQL问题(MySQL),sql,mysql,Sql,Mysql,我有一个疑问: SELECT page.id, revision.title, revision.number FROM page INNER JOIN revision ON page.id = revision.pageId 这将返回类似于: "1" "Page Version A" "1" "1" "Page Version B" "2" "1" "Page Version C" "3" 现在,我只想为每一页返回一行,其中包含来自编号最高的最新修订版的数
SELECT page.id, revision.title, revision.number
FROM page
INNER JOIN revision ON page.id = revision.pageId
这将返回类似于:
"1" "Page Version A" "1"
"1" "Page Version B" "2"
"1" "Page Version C" "3"
现在,我只想为每一页返回一行,其中包含来自编号最高的最新修订版的数据。如果我这样做:
SELECT page.id, revision.title, revision.number
FROM page
INNER JOIN revision ON page.id = revision.pageId
GROUP BY page.id
我得到:
"1" "Page Version A" "1"
但我想:
"1" "Page Version C" "3"
有什么想法吗?
谢谢。添加一个WHERE子句,类似于
其中revision.number=从revision r中选择maxnumber,其中r.pageId=page.id如果只想选择一条记录,可以使用类似于MSSQL“TOP”的MySQL“LIMIT”关键字 例如:
<>这将命令你的所有结果,然后选择最上面的结果。 如果这是一个你将运行很多次的查询,我会考虑创建一个视图,它选择每个页面的最新版本:
SELECT page.id, MAX(revision.number)
FROM page
INNER JOIN revision ON page.id = revision.pageId
GROUP BY page.id
create view LatestRevision
as
Select pageid, max(number) from revision
那么,问题就来了
SELECT page.id, revision.title, revision.number
FROM page
INNER JOIN revision ON page.id = revision.pageId
INNER JOIN LatestRevision on revision.pageid = LatestRevision.pageid and revision.Number = LatestRevision.number
这将只选择最大版本号,而不是整个最新版本。此解决方案比Rahul的解决方案快!
SELECT page.id, revision.title, revision.number
FROM page
INNER JOIN revision ON page.id = revision.pageId
INNER JOIN LatestRevision on revision.pageid = LatestRevision.pageid and revision.Number = LatestRevision.number