2010-07-22 59 views
2

我得到了一個MySQL日誌表。它具有以下字段:id,status_id,object_id,創建,修改。mysql命令和groupby

我想知道什麼是獲得每個對象的最新狀態的最佳方式?

在此先感謝!

編輯: 我最後的解決辦法是做

SELECT id, status_id, object_id, created, modified 
FROM (SELECT * FROM logs ORDER BY created DESC) AS a 
GROUP BY object_id 

它的工作原理,但我覺得有這樣做的更好的方法。任何人都在意在這裏啓發我們在這裏? :)

+0

是status_id對包含狀態的另一個表的外鍵引用嗎? – 2010-07-22 07:59:08

+0

到目前爲止你得到了什麼SQL?它有什麼問題? – Oded 2010-07-22 07:59:39

+0

啊,我現在看到,這是一個表格,詳細描述了一個對象在一段時間內的狀態。對不起,現在還早。 – 2010-07-22 08:00:14

回答

2

試試這個,我沒有檢查這一點,但應該工作

select object_id, status_id, MAX(created) 
from ff 
group by object_id having created = MAX(created) 

的關鍵是使用having函數會選擇最後一個項目,每分組的對象

編輯:

我加了status_id來選擇;)

+0

奇怪的人,我得到:在HAVING子句中創建的未知列 – user295284 2010-07-22 08:19:20

+0

你的表中有'created'列嗎?你可以嘗試顛倒它:'MAX(created)= created' – 2010-07-22 08:25:45

+0

是的,我已經試過了,它仍然不起作用:( – user295284 2010-07-22 08:30:43

1

你可能要找

SELECT status_id FROM logs WHERE object_id = xx ORDER BY modified DESC LIMIT 0, 1 

如果你有一個狀態代碼另一個表,你可以使用

SELECT status_code FROM logs, status_codes_table 
WHERE status_code_id = status_id AND object_id = xx 
ORDER BY modified DESC LIMIT 0, 1 

編輯

如果你想擁有的所有對象和他們最新的狀態碼錶,你可以使用:

SELECT object_id, status_id 
FROM logs 
GROUP BY object_id 
HAVING modified = MAX(modified) 
+0

你最後的解決方案,我正在尋找也不工作:(仍然得到在HAVING子句錯誤中修改了未知列 – user295284 2010-07-22 08:58:27