我有一个用户"会话"数据(登录/注销时间和use_time)。现在我想创建一个顶级列表,其中包含:
包含数据的表格如下:
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个(总时间,周时间,月份时间)。
是否可以通过一个查询完成,如果可能,在合理的时间内完成?
答案 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;