七日存留查詢(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 即可轉換成百分比

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