MySQL获得不同时间跨度和组的结果

时间:2014-09-23 20:06:17

标签: mysql sql

我有一个用户"会话"数据(登录/注销时间和use_time)。现在我想创建一个顶级列表,其中包含:

  • 总时间
  • 时间过去24小时(天)
  • 一周时间
  • 月份时间

包含数据的表格如下:

id | user_id | login_time (datetime) | logout_time (datetime) | online_time (int in seconds)

不幸的是,我还没有找到一种方法来完成一个查询。

SELECT sum(s.online_time) as ontime, u.name as name FROM session_user s INNER JOIN users u ON u.id=s.user_id WHERE login_time > NOW() - INTERVAL 1 DAY GROUP BY u.id

此查询确实为我提供了每个活跃用户的每日时间,但我还想要其他3个(总时间,周时间,月份时间)。

是否可以通过一个查询完成,如果可能,在合理的时间内完成?

1 个答案:

答案 0 :(得分:2)

您可以使用条件聚合来获取此信息:

SELECT u.name, sum(s.online_time) as oneime,
       sum(case when login_time > NOW() - INTERVAL 1 DAY then s.online_time end) as ontime_1day,
       sum(case when login_time > NOW() - INTERVAL 7 DAY then s.online_time end) as ontime_1week,
       sum(case when login_time > NOW() - INTERVAL 1 MONTH then s.online_time end) as ontime_1month
FROM session_user s INNER JOIN
     users u
     ON u.id=s.user_id
GROUP BY u.id;