2014-01-22 43 views
1

我有一個修訂數據庫表,其中包含多個修訂版(pageId),位於網站(webId)下。我想編寫一個查詢來獲取網站的最新修訂版.For例如下面的表格顯示了兩個文件ID爲1和2,現在我想要得到的版本號101和104,因爲它們是最新的爲各自的pages.I我使用MySQL的從mysql中的修訂表中獲取最新條目

+----+---------+-------------+---------------------+-------+---------------------+ 
| id | userId | webId  |revisionCont   | pageId| dateUpdated   | 
+----+---------+-------------+---------------------+-------+---------------------+ 
| 100|  1 |   2 | some text   | 1  | 2014-01-07 08:00:00 | 
| 101|  1 |   2 | some text   | 1  | 2014-01-07 08:01:00 | 
| 103|  2 |   2 | some text   | 2  | 2014-01-07 08:15:32 | 
| 104|  2 |   2 | some text   | 2  | 2014-01-07 09:10:32 | 
+----+---------+-------------+---------------------+-------+---------------------+ 

我不能弄清楚我該怎麼做呢?有人能指導我嗎?

+0

沒想到那麼簡單!謝謝你的回答! – KillABug

回答

3

要獲得完整的排做:

SELECT * FROM revision WHERE Id IN (
    SELECT MAX(id) FROM revision GROUP BY pageId ORDER BY dateUpdated DESC 
) 
+0

接受這個,因爲我需要整行。以前的答案是接近,但作爲@ eKek0指出,我沒有承擔其他事情。我只是檢查了小提琴,並認爲它的工作。根據SO規則可能這是最合適的。認識錯誤。 – KillABug

2

下面是查詢示例:

SELECT id FROM revision GROUP BY pageId ORDER BY dateUpdated DESC 

它會得到所有記錄的ID(101和104),每個PAGEID,由dateUpdated排序(下降)

+0

不錯的一個!對於將來的visitros:添加一些查詢說明GROUP BY和ORDER BY在這種情況下的作用。 :)= – Melon

+0

此查詢不能保證正常工作。事實上,如果是這樣,這是巧合。 MySQL文檔*顯式警告在聚合查詢中選擇任意列的查詢(http://dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html)。再加上'by by'發生在'group by'之後。 –

+0

@KillABug他已經評論過我的回答。 –

3
SELECT MAX(id) id FROM revision GROUP BY pageId 

應該這樣做。

+0

查看@ Legionar的回答。 –

4

試試這個

SELECT max(id) id FROM revision 
GROUP BY pageId 

DEMO HERE

輸出:

ID 
104 
101 

編輯:如果您需要filrter或命令輸出,那麼只需添加ORDER BY dateUpdated DESC

+0

+1。 。 。這個答案是正確的。但是,你不需要'order by'。 –

+0

@GordonLinoff是的,謝謝:),我刪除了訂單,如果他以後需要它,就取決於他 –

+1

如果你知道修訂的順序是由於dateUpdated字段造成的,那麼你確實需要它來過濾最後的 – eKek0