分组/有奇怪的行为

时间:2014-05-25 18:12:59

标签: php mysql sql laravel-4

我面临一个非常奇怪的问题。

基本上我需要从一个表中提取一组行,其中每一行都是"最老的"在自己的小组中。

该表的结构如下:

  • id,整数
  • domain_id,整数
  • 值,整数
  • created_at,datetime

我的查询是

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返回的值与表有关,而不是与组有关!

2 个答案:

答案 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)

我没有对此进行过测试,只是从头脑中写下了