我正在查询审计数据库,试图找出每个用户已完成的操作数以及最后一次操作的时间。
我使用的查询是:
SELECT user_id,
count(id) as actions,
datetime
from auditing
WHERE datetime>='2014-03-01 00:00:00'
GROUP BY user_id
ORDER BY `auditing`.`datetime` DESC
这正确地显示了项目的总数,但它没有显示正确的最后日期 - 它确实显示它非常随机的日期,即不在列表的顶部或底部,而是从中间的某个地方拍摄。我检查了一些生成的条目,它们都是错误的,并没有反映最新的行动。
如何让它向我展示上述查询中的最后一个(最近的)事件?
示例:
user_id | actions | datetime
1 | 10 | 2014-07-04 16:10:14
2 | 55 | 2014-07-05 11:15:08
3 | 8 | 2014-07-04 22:19:43
由于
答案 0 :(得分:2)
您SELECT
子句或中只有GROUP BY
列属于aggregate function的结果。您可以并且可能应该configure your database server 以便它会抱怨您的查询。它会说:
ERROR 1055 (42000): 'datetime' isn't in GROUP BY
背后的原因是,您没有告诉数据库服务器您想要哪个 datetime
值(最早的,平均的,最新的?)。因此,为了获得最后一个值,请尝试以下查询:
SELECT user_id, count(id) as actions, max(datetime)
FROM auditing
WHERE datetime>='2014-03-01 00:00:00'
GROUP BY user_id
ORDER BY user_id
答案 1 :(得分:1)
你可以试试这个:
SELECT user_id, COUNT(actions), MAX(datetime)
FROM auditing
WHERE datetime>='2014-03-01 00:00:00'
GROUP BY user_id