我有一张包含以下数据的表格:
UserName | LastLogin
-------------------------------
User1 | 2010-10-25 10:05:47
User2 | 2010-10-23 11:10:27
User3 | 2010-10-12 05:39:34
User4 | 2010-10-20 12:22:11
User5 | 2010-09-17 08:41:05
我希望能够运行查询以获取过去3天,过去7天和过去21天内登录的人数(我知道这些数字会重叠)。我知道我可以通过运行查询来获得每个特定值(语法可能不是100%正确):
SELECT COUNT(*)
FROM login
WHERE LastLogin >= DATEDIFF(NOW(), LastLogin, INTERVAL 3 DAY);
我可以运行查询以在一个查询中返回所有三个值吗? GROUP BY是否可以工作,还是可以使用嵌套查询?使用指定的不同间隔运行查询三次是否同样有效?
答案 0 :(得分:7)
使用:
SELECT SUM(CASE WHEN l.lastlogin >= DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS within_3,
SUM(CASE WHEN l.lastlogin >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS within_7,
SUM(CASE WHEN l.lastlogin >= DATE_SUB(CURRENT_DATE, INTERVAL 21 DAY) THEN 1 ELSE 0 END) AS within_21
FROM LOGIN l
我使用CURRENT_DATE而不是NOW(),因为NOW()包含时间部分。
答案 1 :(得分:0)
SELECT *
FROM (SELECT COUNT(*) AS Last3Days FROM login WHERE LastLogin >= DATEDIFF(CURRENT_DATE, LastLogin, INTERVAL 3 DAY) a,
(SELECT COUNT(*) AS Last7Days FROM login WHERE LastLogin >= DATEDIFF(CURRENT_DATE, LastLogin, INTERVAL 7 DAY) b,
(SELECT COUNT(*) AS Last21Days FROM login WHERE LastLogin >= DATEDIFF(CURRENT_DATE, LastLogin, INTERVAL 21 DAY) c