mysql单表统计认证时间间隔小于15天的人数和次数


我们产品提出了一个需求,正常用户认证是30天认证一次,但是她想统计一下提前认证的用户数。数据库表就一个,用户认证历史表,记录了所有用户每次认证的情况。
我面对这个问题的时候,首先想到的是用sql直接写,但是发现这个问题比想象的要复杂。转而想用存储过程写,但是写了一会,觉得一方面存储过程的调试不是每个工具都支持单步调试,另一方面之前的经验告诉我,没有sql 搞不定的事情。于是想挑战自己,又改为了尝试用sql 直接实现。
这个问题的麻烦之处在于自己的所有认证时间和自己所有认证时间的比较。那就只好用mysql执行的时候的内置临时表了,生成两张临时表,然后对用户id相同的所有数据互相进行比较,找到间隔时间小于15天的数据。沿着这个思路有了下面的sql。
--获取认证时间小于15天的次数和人数
select count(tab1.c_user_id)/2, count(distinct(tab1.c_user_id))
from 
(select t.c_user_id, t.t_used_tm 
from t_credit_fee_history t 
where t.b_valid = 1 and t.b_rcv_end = 1 and t.b_used = 1
group by t.c_user_id, t.t_used_tm)tab1,
(select t.c_user_id, t.t_used_tm 
from t_credit_fee_history t 
where t.b_valid = 1 and t.b_rcv_end = 1 and t.b_used = 1
group by t.c_user_id, t.t_used_tm)tab2
where tab1.c_user_id = tab2.c_user_id
and tab1.t_used_tm != tab2.t_used_tm
and abs(datediff(tab1.t_used_tm, tab2.t_used_tm))<15

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: