2011-04-13 52 views
2

我有一個包含歷史值的表。每次更新其中一個值時,將該值的副本添加到此索引爲「request_id」的表中MySQL查詢,來自歷史值表的最新值

我正在查找以獲取每個「request_id」的最新值,而無需檢索整個表。

當前表:

ID | Modified | request_id | value 
------------------------------------- 
1 |  10 |   1 | "one" 
2 |  15 |   1 | "two" 
3 |  15 |   2 | "three" 
4 |  18 |   1 | "fore" 
5 |  25 |   3 | "five" 
6 |  36 |   1 | "six" 

結果表

ID | Modified | request_id | value 
------------------------------------- 
3 |  15 |   2 | "three" 
5 |  25 |   3 | "five" 
6 |  36 |   1 | "six" 
我使用PHP和SQLite,如果它使任何區別

回答

3

SQLite? HMZ,不能測試,但試試這個:

SELECT value FROM your_table GROUP BY request_id ORDER BY modifier; 

如果您有與此查詢的任何問題,發佈錯誤,我們會嘗試修復。

+0

作品,等待5分鐘用於接受超時。 – 2011-04-13 22:36:14

+0

+1我從來不知道GROUP BY命令...非常好。我將不得不記住這一個。 – MasterZ 2011-04-13 22:42:22

+0

@MasterZ獨特的作品在整個行集,這意味着如果你選擇的值和request_id,你會得到所有的行,因爲沒有2行具有相同的request_id和值...只是一個提示:) – Khez 2011-04-13 22:45:05

1

我可能語法有點不對,但這應該指向正確的方向。

"SELECT DISTINCT request_id FROM history_table ORDER BY modified" 

這隻會抓住每個request_id中的一個,所以你不會得到重複。

+0

做'ORDER BY修改',它會更接近工作。不同的是,在其他類似的情況下並不如此。你需要獲得價值! – Khez 2011-04-13 22:32:02

+0

我做了改變。謝謝。 :) 是的,我認爲我曾經只用過DISTINCT,但在這種情況下,我認爲它很有用。 – MasterZ 2011-04-13 22:33:42

+0

問題在於它不會返回行數據。它只返回request_id的DISTINCT值 – 2011-04-13 22:35:40

-1
SELECT * 
FROM test_table t1 
WHERE t1.modified IN (SELECT max(Modified) 
         FROM test_table t2 
         WHERE t2.request_id = t1.request_id 
         GROUP By t2.request_id) 

注意:這不是一個非常有效的方法,因爲它具有相關的子查詢。

編輯:無相關性,對PostgreSQL

SELECT * FROM test 
WHERE (request_id, modified) IN (SELECT request_id, max(modified) 
           FROM test 
           GROUP BY request_id);