我在该地区看到很多帖子,但找不到确切的帖子。 我有一个表将所有用户登录注册到我的应用程序,它包含两列 - userID和timeOfLogin。它看起来像是:
userID, timeOfLogin
1 , 14-01-10 00:07:38
2 , 14-01-10 01:28:45
3 , 14-01-10 01:28:45
1 , 14-01-09 02:04:08
1 , 14-01-09 06:14:54
etc....
我希望有一个表来计算自我在查询中定义的特定“day1”以来每天唯一用户登录的数量(第2天是第二天,依此类推)。该表应该类似于:
userID, numOFLogins day1, numOfLogins Day2, numOfLogins Day3, ...., numOfLogins DayN
1 , 10 , 12 , 0 , ...., 12
2 , 3 , 6 , 7 , ...., 15
132 , 0 , 5 , 9 , ...., 14
答案 0 :(得分:3)
您可以使用条件聚合执行此操作:
select userId,
sum(date(timeOfLogin) = date(@day1)) as NumLogins_0,
sum(date(timeOfLogin) = date(date(@day1) + 1)) as NumLogins_1,
sum(date(timeOfLogin) = date(date(@day1) + 2)) as NumLogins_2,
sum(date(timeOfLogin) = date(date(@day1) + 3)) as NumLogins_3,
sum(date(timeOfLogin) = date(date(@day1) + 4)) as NumLogins_4
from table t
group by userId;
在MySQL中,date(timeOfLogin) = @day1
在表达式为false时被视为0
,在{1}}时被视为真。
我只是使用1
来表示日期的变量,无论是什么。
这适用于固定数量的列(例如上面显示的5天)。如果需要可变数量的列,则不能使用简单的SQL语句执行此操作。您需要在字符串中构造SQL,使用@day1
并执行它。