MySQL - 检索每个用户每天的最新更新

时间:2013-02-01 21:50:28

标签: mysql sql greatest-n-per-group

我有一个带有列

的假设表“users”
  • user_id(自动递增)
  • 名称
  • FOO
  • LAST_UPDATED

此表每天更新多次。我如何查询以获取每个用户每天的最新更新,返回X天?

示例数据

1 John a b "2013-01-31 02:01:12"
2 Rich c d "2013-01-31 22:41:12"
3 John e f "2013-01-31 22:01:15"
4 Rich g h "2013-02-01 16:01:12"
5 John i j "2013-02-01 22:21:12"
6 Rich k m "2013-02-01 22:21:12"

期望的回报集:

2 Rich c d 2013-01-31
3 John e f 2013-01-31
5 John i j 2013-02-01
6 Rich k m 2013-02-01

我可以使用以下查询获得每个用户的最新更新,它将它应用于我正在努力的每一天。

SELECT u1.*
FROM users u1 
    LEFT JOIN users u2
    ON (u1.name = u2.name AND u1.user_id < u2.user_id)
WHERE u2.user_id IS NULL

2 个答案:

答案 0 :(得分:0)

通过总结日期级别的数据,然后加入回来来做到这一点:

select u.*
from users u join
     (select u.nanme, DATE(last_updated) as thedate, MAX(last_updated) as maxlastupdated
      from users u
      group by u.name, DATE(last_updated)
     ) usum
     on u.name = usum.name and
        u.last_updated = usum.maxlastupdated

答案 1 :(得分:0)

首先,表名users非常混乱,因为这些不是用户而是登录。

除此之外,你的方式正确。您只需要在联接中添加日期比较。

SELECT u1.*
FROM users u1
    LEFT JOIN users u2
    ON (u1.name = u2.name AND date_format(u1.last_updated, '%Y-%m-%d') = date_format(u2.last_updated, '%Y-%m-%d') AND u1.user_id < u2.user_id)
WHERE u2.user_id IS NULL

请参阅此SQL fiddle