WITH all_dates AS (
SELECT DISTINCT date
FROM login
),
original_query AS (
SELECT t1.date, ROUND(IFNULL(COUNT(l.user_id) / COUNT(t1.user_id), 0), 3) AS p
FROM (
SELECT MIN(date) AS date, user_id,
DATE_ADD(MIN(date), INTERVAL 1 DAY) AS second_day
FROM login
GROUP BY user_id
ORDER BY date
) t1
LEFT JOIN login l
ON t1.user_id = l.user_id
AND t1.second_day = l.date
GROUP BY date
)
SELECT ad.date, COALESCE(oq.p, 0) AS p
FROM all_dates ad
LEFT JOIN original_query oq
ON ad.date = oq.date
ORDER BY ad.date;