计算操作次数并显示最后的操作日期

时间:2014-07-08 14:42:12

标签: mysql datetime aggregate-functions

我正在查询审计数据库,试图找出每个用户已完成的操作数以及最后一次操作的时间。

我使用的查询是:

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

由于

2 个答案:

答案 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