SQL - 检索与多个单查询值where子句

问题描述:

我有一个表以下数据:SQL - 检索与多个单查询值where子句

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会工作吗,还是可以使用嵌套查询?以指定的不同间隔运行查询三次效果如何?

使用:

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()包括的时间部分。

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