【发布时间】:2016-05-25 05:55:42
【问题描述】:
在我的聊天应用程序中,我在 Android 应用程序上使用 System.currentTimeMillis()/1000 将创建消息的时间发送到我的 MySQL 服务器,没有毫秒部分。现在奇怪的是,我的表有两条相同的毫秒值记录。更奇怪的是,当我将毫秒转换为可读时间时,值完全不同!
这是两个不同查询的输出:
SELECT max(UNIX_TIMESTAMP(created_at)), created_at, message FROM messages WHERE mtype = 0 AND groups_id = 1;
max(UNIX_TIMESTAMP(created_at)) | created_at | message |
+--------------------------------+---------------------+---------+
| 1464096148 | 2016-04-25 13:57:18 | The
SELECT UNIX_TIMESTAMP(created_at), created_at, MESSAGE FROM messages WHERE mtype = 0 AND groups_id = 1 ORDER BY created_at DESC LIMIT 1;
max(UNIX_TIMESTAMP(created_at)) | created_at | message |
+--------------------------------+---------------------+---------+
| 1464096148 | 2016-05-24 18:52:28 | test
最后一个查询的输出是我记得从我的客户端应用程序发送的内容。
【问题讨论】:
-
这里没看出有什么问题,应该不一样吧,你在第一个查询中选择了max一个,大概属于
2016-05-24 -
@sagi 请看第一列的毫秒值,它们完全一样。然后检查第二列是否完全不同。
-
他们为什么不呢?您有不止一条记录,因此当您选择
MAX()时,它将选择最大时间戳!其他没有 group by 子句和聚合函数的列将被随机选择 -
@sagi 你在说第一个查询吗?
-
@sagi 别在意我的最后评论,你是对的。我不知道 SQL 的这种行为。你能指导我做出正确的查询以显示正确的结果吗?