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 联系我们: