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

标签 mysql sql greatest-n-per-group

我有一个带有列的假想表“users”

  • user_id(自动递增)
  • 姓名
  • 酒吧
  • 上次更新时间

此表每天更新多次。我如何查询以获得每个用户每天的最后更新,返回 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

最佳答案

首先,表名 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 中查看它的工作原理.

关于MySQL - 检索每个用户每天的最后更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14655633/

相关文章:

PHP 取消设置 sql 查询

上一行的 MySQL 触发器

mysql - 如何防止表格重复输入?

mysql按顺序查询->限制,排序,组。如何?

SQL Server : How to de-duplicate on two columns/conditions?

MySQL:将一列数据插入另一列

mysql - 如何从多个表中选择所有数据?

c# - 存储过程不是那么快吗?

sql - 查找表中大于某个值的最小值

MYSQL 为每个用户选择最快的时间和最低的点击次数