2010-07-22 79 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