我尝试在 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)
更能指示最新记录。其原因在于,唯一的自动增量是对具有相同时间的记录的决胜局。
更好的是,许多人可能已经在自动增量列上有一个索引,因此如果可以的话请使用它。
注意事项是:
- 您喜欢准确性并关心数据质量
- 您关心项目创建的相对时间。如果可以并且需要修改日期时间,则可以使用日期时间列。
- 您的帐户表中有一个自动递增列(如上述 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/