-- 存在次日登录情况的新用户数量
SELECT COUNT(tmp.user_id) co,tmp.date FROM login l1,
(SELECT t.user_id,t.`date` FROM login t WHERE NOT EXISTS (
SELECT 1 FROM login l WHERE t.id = l.id AND l.`date` <= date_sub(t.`date`,interval 1 day)
)
GROUP BY t.user_id) tmp
WHERE l1.user_id = tmp.user_id
AND l1.`date` = DATE_ADD(tmp.`date`,interval 1 day)
GROUP BY tmp.date;
-- 每日新用户数量
SELECT l2.date,COUNT(tms.user_id) FROM login l2 LEFT join (
SELECT t.user_id,t.`date` FROM login t WHERE NOT EXISTS (
SELECT 1 FROM login l WHERE t.id = l.id AND l.`date` <= date_sub(t.`date`,interval 1 day)
)
GROUP BY t.user_id) tms
ON l2.user_id = tms.user_id
AND l2.date = tms.date
GROUP BY l2.date;
-- 极其复杂的算出结果
SELECT tmp1.date,
CASE
WHEN tmp1.co != 0
THEN ROUND((IFNULL(tmp2.co,0)/tmp1.co),3)
ELSE round(0.000)
END co
FROM
(SELECT l2.date,COUNT(tms.user_id) co FROM login l2 LEFT join (
SELECT t.user_id,t.`date` FROM login t WHERE NOT EXISTS (
SELECT 1 FROM login l WHERE t.id = l.id AND l.`date` <= date_sub(t.`date`,interval 1 day)
)
GROUP BY t.user_id) tms
ON l2.user_id = tms.user_id
AND l2.date = tms.date
GROUP BY l2.date) tmp1
LEFT JOIN
(SELECT COUNT(tmp.user_id) co,tmp.date FROM login l1,
(SELECT t.user_id,t.`date` FROM login t WHERE NOT EXISTS (
SELECT 1 FROM login l WHERE t.id = l.id AND l.`date` <= date_sub(t.`date`,interval 1 day)
)
GROUP BY t.user_id) tmp
WHERE l1.user_id = tmp.user_id
AND l1.`date` = DATE_ADD(tmp.`date`,interval 1 day)
GROUP BY tmp.date) tmp2
ON tmp1.date = tmp2.date;