1

我有一个表,其中包含一个 Web 应用程序的日志记录,它跟踪人们何时登录。我的表的一个示例是:

| user_id | date_time        |
+---------+------------------+
|    0033 | 2012-11-22 10:33 | <- first login of 0033 on 2012-11-22
|    0034 | 2012-11-22 10:38 | <- first login of 0034 on 2012-11-22
|    0052 | 2012-11-22 10:43 | <- first login of 0052 on 2012-11-22
|    0052 | 2012-11-23 09:23 |
|    0066 | 2012-11-23 15:58 | <- first login of 0066 on 2012-11-23
|    0033 | 2012-11-23 16:14 |

我想要的是一个表格,其中包含每个日期第一次登录的人数,即:

| count | date       |
+-------+------------+
|     3 | 2012-11-22 | <- there were 3 users that logged in for the first time on 2012-11-22
|     1 | 2012-11-23 |

我知道我只能通过做得到日期

SELECT DATE(`date_time`) AS `date`
FROM `logging`
GROUP BY `date`
ORDER BY `date` ASC

我想在一个查询中获得第二个表,我知道这是可能的,我只是不知道如何。提前致谢

4

3 回答 3

1

您可以使用不相关的子查询来获取每个用户的首次登录日期,然后将这些日期组合在一起以获得每天的首次登录次数。

SELECT dd, COUNT(*)
FROM (SELECT MIN(DATE(`date_time`)) AS dd
    FROM `logging`
    GROUP BY `user_id`) a
GROUP BY dd
ORDER BY dd;

Demo

于 2012-11-27T13:28:59.730 回答
1

统计每天的登录次数,对于之前没有登录记录的 user_ids:

select  DATE(`date_time`) as `date`,
        count(user_id)
from    `logging` l1
where   user_id not in (
        select user_id from `logging` l2 where l1.user_id = l2.user_id and l2.date_time < l1.date_time)
group by DATE(`date_time`)
于 2012-11-27T13:30:22.263 回答
-1

我认为你需要这个:

SELECT count(1) ,
       DATE(`date_time`) 
from my_table
group by DATE(`date_time`)

如果您需要每天登录的用户

Select 

user_id, `date_time` from my_table group by DATE(`date_time`), user_id
于 2012-11-27T13:20:48.650 回答