每个用户每天在日期范围内登录的次数

时间:2014-02-13 16:04:56

标签: mysql sql database

我在该地区看到很多帖子,但找不到确切的帖子。 我有一个表将所有用户登录注册到我的应用程序,它包含两列 - 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

1 个答案:

答案 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并执行它。