2009-02-03 70 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