我面临一个非常奇怪的问题。
基本上我需要从一个表中提取一组行,其中每一行都是"最老的"在自己的小组中。
该表的结构如下:
我的查询是
SELECT * FROM domains_urls GROUP BY domain_id HAVING created_at = MAX(created_at)
如果我没有错,它应该按domain_id对行进行分组,并提取与match_at = MAX(created_at)匹配的行。
重点是它没有按预期工作!
表格内容为
id domain_id value created_at
1 2 1 2014-05-25 10:30:13
2 1 3 2014-05-25 19:30:13
3 2 2 2014-05-25 11:30:13
4 2 7 2014-05-25 15:30:13
5 2 4 2014-05-25 12:30:13
6 2 5 2014-05-25 13:30:13
我应该得到两行:
id domain_id value created_at
2 1 3 2014-05-25 19:30:13
4 2 7 2014-05-25 15:30:13
相反,我只得到
id domain_id value created_at
4 2 7 2014-05-25 15:30:13
我在Windows 7上使用MySQL 5.5
我需要使用HAVING + GROUP BY或DISTINCT + ORDER BY(未经测试)。
谢谢!
编辑:
因为我很笨(我应该避免在周日工作),MAX返回的值与表有关,而不是与组有关!
答案 0 :(得分:2)
您可以使用max(created_at)
:
select du.*
from domains_urls du
join (select domain_id, max(created_at) maxcreated_at
from domains_urls
group by domain_id
) du2 on du.domain_id = du2.domain_id
and du.created_at = du2.maxcreated_at
答案 1 :(得分:1)
尝试这样的事情
Select * from urls as u group by u.id having u.created >= any (select created from urls u2 where u.id == u2.id)
我没有对此进行过测试,只是从头脑中写下了