mysql,一个日志表,如何统计出只有一天记录的用户?

    有这样一个日志表,存着用户点击的记录,一天可能有多条记录;现在想统计出,只有一天点击记录的用户,有两天的点击记录的用户,有三天的点击记录的用户,以此类推4天,5天....这个sql应该如何写?
    表相关字段:

id(PK,AI) user_id click_time(点击时间:Y-m-d H:i:s)
阅读 3.2k
4 个回答

先说结果。
SELECT TO_DAYS(MAX(time))-TO_DAYS(MIN(time)),USER FROM test GROUP BY USER
执行后,结果如下:
0 王
1 李
2 张
根据用户分组查询,然后计算该用户的最大时间和最小时间之差。比如0和王这条记录,表示王这个用户所有记录都在同一天。

---------------------------分割线-----------------------------
经过@邢爱明同学的提示,才发现自己第一时间想错了。
重新思考以后,只需要写一句代码即可。
自己测试新建了一张表test,表结构如下
图片描述

SELECT NAME,COUNT(DISTINCT(DATE(click_time))) FROM test GROUP BY NAME

执行完sql以后如下:
图片描述

只有一天的比较好写。
用用户的最大点击时间 - 用户最小的点击时间。如果没超过一天。就是只有一天的。
其他情况
取到最小时间,按天数往上加,如果超过了最大时间。计算循环次数

来,逻辑,先将点击时间设置在某个范围然后去重 user_id (distinct),或者分组 group by。这是第一步,然后使用 count 函数进行统计,总共有多少条,也就是有多少天,然后再依据这个结果进行分组。也就出现了,一天,两天,三天的排列。希望具体语句如果不会你要先去学习一下。具体写的我写在下面给你。

select a.datenum,group_concat(a.user_id,',') from (select count(*) as datenum,user_id from table group by to_days(click_time),user_id ) as a group by a.datenum; 

ps: 啊,因为没有具体数据测试,具体能不能使用,你还是要测试一下(如果你要用我写的话)。逻辑大概如此。

问题描述的比较模糊,@陈二先生 已经给出大概的思路了,@liuxy 看一下是不是你要的结果。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏