这是我的问题:
SELECT count(1) all_requests_num, date_time
FROM requests
WHERE user_id = :id
ORDER BY date_time DESC
LIMIT 1
正如您所看到的,我已经根据date_time
降序排序了行。但date_time
的结果并不是最大的价值。为什么?我该如何解决?
这是一个简化的例子:
// requests
+----+------------+-------------+
| id | other_cols | date_time |
+----+------------+-------------+
| 1 | ... | 1517045060 |
| 2 | ... | 1517045061 |
| 3 | ... | 1517045062 |
| 4 | ... | 1517045063 |
+----+------------+-------------+
date_time
的预期结果为1517045063
,但上面的查询返回1517045060
。
答案 0 :(得分:0)
好的,答案是在MAX()
列上使用date_time
:
SELECT count(1) all_requests_num, MAX(date_time) date_time
FROM requests
WHERE user_id = :id
答案 1 :(得分:0)
您的查询使用的MySQL(错误)功能无法在任何其他数据库中使用。 COUNT()
是一个聚合函数。如果没有GROUP BY
,它会将查询转换为返回一行的聚合查询。 LIMIT 1
是多余的 - 删除它并查看我的意思。
您可以使用date_time
和ORDER BY
以多种方式获得最大LIMIT
:
SELECT date_time
FROM requests
WHERE user_id = :id
ORDER BY date_time DESC
LIMIT 1;
这不会给你数数。为此,只使用聚合查询(如Martin所建议的):
SELECT COUNT(*), MAX(date_time)
FROM requests
WHERE user_id = :id;
令人高兴的是,这种结构可以同时用于所有用户:
SELECT user_id, COUNT(*), MAX(date_time)
FROM requests
GROUP BY user_id;