初心者です。
mysqlでまず、日毎に更新したユーザー数を取得し、1ヶ月間での更新したユーザー数をだそうとしています。
1ヶ月以内に日が変わってから同じユーザーが更新しても1とカウントします。
以下のコードなのですが、日が変わってから同じユーザーが更新した場合2にカウントしてしまい詰まっています、、、
sumの後にもdistinctをつけているのですが何がいけないんでしょうか、
よろしくお願いいたします。
SELECT active_user_summary.date AS date, active_user_summary.active_user_count AS ACTIVE_USER_COUNT FROM ( SELECT b1.date, sum(DISTINCT b2.active_user_count) AS active_user_count FROM ( SELECT calendar.date FROM ( SELECT @f:='2018-09-21' AS date UNION ALL SELECT @f:=DATE_ADD(@f, INTERVAL 1 DAY) FROM exhibits WHERE @f < DATE_ADD(NOW(), INTERVAL -1 DAY) ) AS calendar LEFT JOIN exhibits ON DATE(exhibits.created_at) = calendar.date GROUP BY calendar.date ) AS b1 INNER JOIN ( SELECT calendar.date, count(DISTINCT exhibits.user_id) AS active_user_count FROM ( SELECT @f:='2018-09-21' AS date UNION ALL SELECT @f:=DATE_ADD(@f, INTERVAL 1 DAY) FROM exhibits WHERE @f < DATE_ADD(NOW(), INTERVAL -1 DAY) ) AS calendar LEFT JOIN exhibits ON DATE(exhibits.created_at) = calendar.date GROUP BY calendar.date ) b2 ON DATE_ADD(b1.date, INTERVAL -30 DAY) <= b2.date AND b2.date <= b1.date GROUP BY b1.date ) AS active_user_summary
【追記】
このコードが求めたい結果まであといっぽぽいです。
わかるか方よろしくおねがいたします。
SELECT calendar.date, count(DISTINCT exhibits.user_id) AS active_user_count FROM ( SELECT @f:='2018-10-01' AS date UNION ALL SELECT @f:=DATE_ADD(@f, INTERVAL 1 DAY) FROM exhibits WHERE @f < DATE_ADD(NOW(), INTERVAL -1 DAY) ) AS calendar LEFT JOIN exhibits ON (calendar.date -30 DAY) <= DATE(exhibits.created_at) <= calendar.date where DATE_ADD(calendar.date, INTERVAL -30 DAY) <= DATE(exhibits.created_at) GROUP BY calendar.date
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/09 03:06 編集
2018/11/09 04:20
2018/11/09 04:50
2018/11/09 05:56
2018/11/09 13:58