七日存留查询(MYSQL)

使用当前日期往前推,  一至七日, 每日存留都会更新,   最新存留信息

推荐使用定时调度任务每日23:55 分执行, 这个查询数据量比较大

用户表里必须有两个字段, 用户创建时间create_time(类型为date,YMD),  最后登入时间last_login

SELECT
      IFNULL((
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -1 DAY) AND last_login >= DATE_FORMAT(NOW(),'%y-%m-%d'))/
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -1 DAY))
      ),0) one_day,
      IFNULL((
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -2 DAY) AND last_login >= DATE_FORMAT(NOW(),'%y-%m-%d'))/
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -2 DAY))
      ),0) tow_day,
      IFNULL((
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -3 DAY) AND last_login >= DATE_FORMAT(NOW(),'%y-%m-%d'))/
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -3 DAY))
      ),0) three_day,
      IFNULL((
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -4 DAY) AND last_login >= DATE_FORMAT(NOW(),'%y-%m-%d'))/
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -4 DAY))
      ),0) four_day,
      IFNULL((
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -5 DAY) AND last_login >= DATE_FORMAT(NOW(),'%y-%m-%d'))/
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -5 DAY))
      ),0) five_day,
      IFNULL((
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -6 DAY) AND last_login >= DATE_FORMAT(NOW(),'%y-%m-%d'))/
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -6 DAY))
      ),0) six_day,
      IFNULL((
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -7 DAY) AND last_login >= DATE_FORMAT(NOW(),'%y-%m-%d'))/
      (SELECT COUNT(*) FROM ylb_account WHERE create_date = DATE_ADD(DATE_FORMAT(NOW(),'%y-%m-%d'),INTERVAL -7 DAY))
      ),0) seven_day

结果字段数据类型为fload,   乘100 即可转换成百分比

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章