Mysql 按日期时间或unixtime获取用户多行的最新记录

标签 mysql group-by

我尝试在 stackoverflow、google 上搜索。我主要看到我们使用 max。但是,根据我的记录,它将有一千行,因此在完成之前会花费很多时间。

基本上,我只想按日期时间或unixtime获取最新记录。

表记录,按日期时间 ASC 排序:

Query: select * from accounts order by datetime ASC;

+----------+--------+---------------------+------------+
| user_id  | status | datetime            | unixtime   |
+----------+--------+---------------------+------------+
| 14254047 |      1 | 2013-03-27 01:25:12 | 1364343912 | 
| 14254270 |      1 | 2013-03-27 09:36:58 | 1364373418 | 
| 14254619 |      1 | 2013-03-27 16:07:04 | 1364396824 | 
| 14254047 |      0 | 2013-05-08 07:20:39 | 1367990439 | 
| 14254270 |      0 | 2013-05-09 04:01:36 | 1368064896 | 
| 14254619 |      0 | 2013-05-09 04:01:36 | 1368064896 | 
+----------+--------+---------------------+------------+

当我按 user_id 对它们进行分组时,结果始终显示第一条记录。不是最新的,甚至按日期时间或unixtime DESC添加顺序

Query: select * from accounts group by user_id order by datetime DESC;

+----------+--------+---------------------+------------+
| user_id  | status | datetime            | unixtime   |
+----------+--------+---------------------+------------+
| 14254047 |      1 | 2013-03-27 01:25:12 | 1364343912 | 
| 14254270 |      1 | 2013-03-27 09:36:58 | 1364373418 | 
| 14254619 |      1 | 2013-03-27 16:07:04 | 1364396824 | 
+----------+--------+---------------------+------------+

我想要的结果如下:

+----------+--------+---------------------+------------+
| user_id  | status | datetime            | unixtime   |
+----------+--------+---------------------+------------+
| 14254047 |      0 | 2013-05-08 07:20:39 | 1367990439 | 
| 14254270 |      0 | 2013-05-09 04:01:36 | 1368064896 | 
| 14254619 |      0 | 2013-05-09 04:01:36 | 1368064896 | 
+----------+--------+---------------------+------------+

不使用 MAX() 的最佳方法是什么?

问候

最佳答案

与大多数自动增量情况一样,max(ID) 实际上比 max(datetime) 更能指示最新记录。其原因在于,唯一的自动增量是对具有相同时间的记录的决胜局。

更好的是,许多人可能已经在自动增量列上有一个索引,因此如果可以的话请使用它。

注意事项是:

  1. 您喜欢准确性并关心数据质量
  2. 您关心项目创建的相对时间。如果可以并且需要修改日期时间,则可以使用日期时间列。
  3. 您的帐户表中有一个自动递增列(如上述 ID)。 select * 表示您不这样做,这太糟糕了。但你可以添加一个!

查询。我在此查询中调用了 accounts.id 上方的 ID 列:

select a.*
from accounts a join
    (select user_id, max(id) as maxid
     from accounts
     group by user_id
    ) asum
  on asum.user_id = a.user_id and a.id = asum.maxid
order by a.id DESC;

关于Mysql 按日期时间或unixtime获取用户多行的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453224/

相关文章:

c# - 安装 MySQL .Net 连接器 6.8.3 时出现奇怪错误

PHP 查询到 HTML 单选按钮

mysql - pycharm无法连接到Azure中的mysql

mysql - 所有数据未从 CSV 加载到 MYSQL

mysql - 将多行合并为一列

python - DataFrame groupby 对不超过阈值的序列进行分组

mysql - 使用分组依据

MysQl 将来自同一用户的数据分组在一起

sql - sqlite-如何合并总计数和分组依据?

sql - 没有子查询的表的多次传递