找出近三个月内14天以上未登录的用户ID

筛选出数据库中近三个月内14天以上未登录的用户ID。

mysql数据库表名为当天日期,一天生成一个表,表里有用户ID字段:uuid,登陆时间字段:ctime,如何写一句sql语句过滤筛选出三个月内一个用户ID几次登陆时间中某两次登陆时间大于14天的用户ID?

4个回答

配合日期函数控制范围

近三个月内14天以上未登录的用户ID

SELECT a.uuid from table_name  a
WHERE a.ctime BETWEEN date_add(now(), interval -3 MONTH) AND now() 
GROUP by uuid,CONVERT(CHAR(7),ctime) 
HAVING datediff(now(),date_add(now(), interval -3 MONTH))-COUNT(DISTINCT a.ctime)>14

第二个问题:几次登陆时间中某两次登陆时间大于14天的用户ID
需要结合登出日期计算

如果你要的是任意两次登录时间相隔大于十四天的话,用以下脚本

```SELECT DISTINCT a1.uuid
FROM table_name a1,table_name a2
WHERE a1.uuid=a2.uuid AND ABS(DATEDIFF(a1.ctime,a2.ctime))>14

说一下思路:
1. 将所有登录信息汇总到一张表,ctime改为cdatetime,将表名称中的日期加到time里面;
2. 按用户名,登录时间排序,然后取两次登录的时间差(lead, lag)
3. 刷选大于14天的。

sql想不到,有点太复杂了,但是想到了程序处理的方式
查询三个月内的表,只查询ID,每天的结果做一个List,然后求差集
以下举例:
拿到第一天的List 和第二天的List求差集 只获取第一天有但第二天没有的集合,以此类推
不断的和后面的List顺序求差集,你想查几天的就比几天,最后的差集就是第一天登录但之后xx天以上未登录的用户ID
然后是从第二天开始比、从第三天开始比。。。。。。

weixin_43699852
without regrets 好逻辑!你这逻辑能解决我其他很多问题了!
大约一年之前 回复

是连续14天没登录还是说3个月之内,只要没登录的天数够14天了就算?

weixin_42080504
have_power 不懂的地方随时可以vx我:daijiubu7878
大约一年之前 回复
weixin_42080504
have_power 还有就是,这里的日期字段,用到的粒度都是天的粒度。其实你把三个月数据放到一个表里的过程中,你完全可以只要uuid和ctime(这个字段粒度变成天的粒度)两个字段。这样处理起来效率会很快。关联完的表数据量就相当于你三个月的天数 * 2 * 你每天的uuid总和
大约一年之前 回复
weixin_42080504
have_power 这样data_num字段就是你要找的连续两次登录相差的天数,然后你把超过14天的查出来就完了。
大约一年之前 回复
weixin_42080504
have_power 回复without regrets: 加完自增序列的临时表,我管它叫temp,然后关键的地方来了。这个sql我给你写一下,你想想一下数据的变化。select a.uuid,ifnull(a.ctime,now()),ifnull(b.ctime,date_add(now(), interval -3 month),ifnull(b.ctime,date_add(now(), interval -3 month) - ifnull(a.ctime,now()) data_num from temp a full join temp b on a.uuid = b.uuid and a.自增序列 = b.自增序列 - 1
大约一年之前 回复
weixin_42080504
have_power 回复without regrets: 刚才的回复,需要更改一个地方。三个月的数据放到一个表里之后,需要 select distinct uuid,ctime from table_name order by uuid,ctime;然后再加上自增序列。
大约一年之前 回复
weixin_42080504
have_power 回复without regrets: sql我就不写了,给你说一下思路,你是按日期分的表,粒度是天,对吧?首先你需要把三个月内的数据放在一张表里,表结构就和你天粒度的表结构一样。然后按照用户分组,按照时间由小到大排序。接着在这个结果上加一个自增序列字段。这样的话,预备数据就已经准备好了。
大约一年之前 回复
weixin_42080504
have_power 回复without regrets: 算了,我帮你解决吧,感觉中国人对学术太不尊重了,题目都没搞懂就敢随便作答...
大约一年之前 回复
weixin_42080504
have_power 回复without regrets: 那你采纳的太明智了....
大约一年之前 回复
weixin_43699852
without regrets 你这么一说发现我问的还真是有歧义,是连续14天没登录的,不是三个月内登录天数不够14的。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
mysql如何写一句sql查询近三个月内,最后一次登陆时间距今超过14天的用户ID
2
javaweb用户登录(用myeclipse创建jsp项目,数据库用MySQL,)阿里嘎多
1
接入支付宝授权登录,报系统异常,请稍后再试(resultcode:4000).
1
百度登录页面报错,find_element_by_Id不识别元素
0
sql语句问题:在分类的时候把再从每个类中进行按天分类取出当天的最大id,{[(分类)按天分类]取出最大id}?
1
想找一个浏览器自动点击的插件(点击多个)
5
关于mysql中group by和having使用未达到预期的问题
2
萌新求助:小程序怎么使得每个id上的操作互相独立啊?
1
python爬取音乐id时出错。
4
sql语句:同一张表,多条件查询的语句怎么写
0
zuul+oauth2 怎么获取当前用户信息,为什么现在只能获取用户名?
1
mysql批量插入unique字段重复忽略错误 错误数据也返回主键id的问题
2
今天偶然看见一段Python大神写的代码,觉得好厉害,我在想go是不是也能实现一样的方法
0
点击登录没有任何反应,移动到登录附近鼠标也不会变成手的形状
1
ES 查询数据的id,有些查询的到,有查询不到
1
关于Google Play Billing结算服务,付款后如何将google的订单与自己服务器的订单数据相关联?
0
iptables -A INPUT -f -j DROP 丢弃碎片规则无效
0
代码里面用多线程在跑数据,但是在涉及到某张表的删除操作时就报错
0
交易记录中有金额/日均规模/利息收入三个要素,如果筛选出金额合计、日均规模合计最接近要求,且利息收入总和最小的交易记录
1
select m.name,count(model_id) time from model m,task_model_relation t where m.id = t.model_id GROUP BY t.model_id DESC?这句怎么错了?其他的电脑可以正常运行啊