アクセス集計を月単位でしていたのですが、週単位の集計を作成中です。
以下の先月の集計結果を出すSQLがあり、
【全ユーザ数1月】結果14
SELECT COUNT( * ) FROM ( SELECT DISTINCT user_id FROM access_record AS a GROUP BY a.user_id, a.access_type, a.access_day HAVING a.access_type =101 AND date_format( a.access_day, '%Y-%m' ) = date_format( DATE_SUB( now( ) , INTERVAL 1 MONTH ) , '%Y-%m' ) ) AS b
週単位に絞りこむために、以前ここで質問して教わったやり方を参考にし、COUNT()の部分に、
SELECT COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(DATE_SUB( now( ) , INTERVAL 1 MONTH )) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 0 OR NULL) as `Last_1st` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(DATE_SUB( now( ) , INTERVAL 1 MONTH )) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 1 OR NULL) as `Last_2nd` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(DATE_SUB( now( ) , INTERVAL 1 MONTH )) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 2 OR NULL) as `Last_3rd` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(DATE_SUB( now( ) , INTERVAL 1 MONTH )) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 3 OR NULL) as `Last_4th` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(DATE_SUB( now( ) , INTERVAL 1 MONTH )) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 4 OR NULL) as `Last_5th` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(NOW()) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 0 OR NULL) as `This_1st` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(NOW()) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 1 OR NULL) as `This_2nd` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(NOW()) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 2 OR NULL) as `This_3rd` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(NOW()) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 3 OR NULL) as `This_4th` ,COUNT(DATE_FORMAT(`a`.`access_day`, '%m') = MONTH(NOW()) AND TRUNCATE((DATE_FORMAT(`a`.`access_day`, '%d') - 1) / 7, 0) = 4 OR NULL) as `This_5th` FROM ( SELECT DISTINCT user_id FROM access_record AS a GROUP BY a.user_id, a.access_type, a.access_day HAVING a.access_type =101 AND date_format( a.access_day, '%Y-%m' ) = date_format( DATE_SUB( now( ) , INTERVAL 1 MONTH ) , '%Y-%m' ) ) AS b
と入れてみたのですが、a.access_dayが不明とエラーになりました。
そこで、FROMの中のSELECT文中に、SELECT DISTINCT user_id,a.access_day AS c
とし、b.cとして、a.access_dayを参照できるようにしたのですが、今度は数が合わなくなりました。
恐らく、SELECTの中に入れたためだと思うのですが、ここに入れないと参照できなくなると考えられます。
何か、週単位の集計で解決策ありますでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/12 01:59
退会済みユーザー
2016/02/12 02:23
2016/02/12 02:53
退会済みユーザー
2016/02/12 03:04
退会済みユーザー
2016/02/12 03:17
退会済みユーザー
2016/02/12 04:05
2016/02/12 05:05
退会済みユーザー
2016/02/12 05:31
2016/02/12 06:57