2009-02-03 68 views
2

我有这个疑问:简单的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 
GROUP BY page.id 

我得到:

"1" "Page Version A" "1" 

但我想:

"1" "Page Version C" "3" 

任何想法? 谢谢。

回答

5

添加类似的WHERE子句

WHERE revision.number =(从版本r选择已MAX(号),在r.pageId = page.id)

+0

辉煌,谢谢! :-) – 2009-02-03 10:36:19

2

如果你只是想选择一个记录你可以使用MySQL的“限价”关键字(类似于MSSQL“TOP”)

如:

SELECT page.id, revision.title, revision.number 
FROM page 
    INNER JOIN revision ON page.id = revision.pageId 

ORDER BY revision.number DESC 
LIMIT 0, 1 

这将责令所有结果,然后选择顶部的结果。

+0

也Rahul的人也会工作:) – Sophia 2009-02-03 10:29:42

+0

虽然我确实需要多行,但谢谢。 – 2009-02-03 10:34:24

-1
SELECT page.id, MAX(revision.number) 
FROM page 
INNER JOIN revision ON page.id = revision.pageId 
GROUP BY page.id 
0

如果这是您将运行多次查询,我会考虑做哪些选择每的pageid最新的修订版视图:

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