MySQL 5.5.41を使用しています。
アプリへのアクセスタイプを記録しているテーブル、access_recordがあり、
その表を月単位で(前1年まで)件数を表示させたいと思っています。
何か方法等ありますでしょうか?
Webで調べたのですが、なかな該当するのがなく…
現在日時から、今月とかだけ抜き出せれば、月ごとに抽出し表を必要な個所だけ合体させようかとも思っていますが…
【access_record】
対象日付(date) アクセスタイプ ID アクセス時刻(datetime)
2015-10-30 102 0 2015-10-30 11:30
2015-1030 101 0 2015-10-30 11:25
2015-10-29 201 3 2015-10-29 10:00
【目指している集計表】
アクセスタイプ 11月 10月 9月 8月...
102 0 3 0 0
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/18 03:24
2015/11/18 03:31
回答3件
0
ベストアンサー
SQL
1SELECT 2 `akusesutaipu` AS 'テスト', 3 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 12 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '12ヶ月前', 4 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 11 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '11ヶ月前', 5 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 10 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '10ヶ月前', 6 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 9 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '9ヶ月前', 7 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 8 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '8ヶ月前', 8 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 7 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '7ヶ月前', 9 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 6 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '6ヶ月前', 10 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 5 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '5ヶ月前', 11 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 4 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '4ヶ月前', 12 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 3 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '3ヶ月前', 13 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 2 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '2ヶ月前', 14 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_SUB(now(),INTERVAL 1 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '1ヶ月前', 15 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(now(), '%Y-%m') THEN 1 ELSE NULL END) AS '今月' 16FROM access_record 17GROUP BY `akusesutaipu`
もしくは
SQL
1SELECT 2 `akusesutaipu` AS 'テスト', 3 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -12 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '12ヶ月前', 4 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -11 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '11ヶ月前', 5 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -10 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '10ヶ月前', 6 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -9 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '9ヶ月前', 7 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -8 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '8ヶ月前', 8 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -7 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '7ヶ月前', 9 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -6 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '6ヶ月前', 10 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -5 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '5ヶ月前', 11 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -4 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '4ヶ月前', 12 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -3 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '3ヶ月前', 13 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -2 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '2ヶ月前', 14 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(DATE_ADD(now(),INTERVAL -1 MONTH), '%Y-%m') THEN 1 ELSE NULL END) AS '1ヶ月前', 15 COUNT(CASE WHEN date_format(akusesujikoku, '%Y-%m') = date_format(now(), '%Y-%m') THEN 1 ELSE NULL END) AS '今月' 16FROM access_record 17GROUP BY `akusesutaipu`
ご指摘ありがとうございます!
動的に列別名つけるのってどうしたらいいんだろう。
投稿2015/11/18 02:42
編集2015/11/18 03:01総合スコア856
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/18 02:51
2015/11/18 02:54
2015/11/18 02:57
2015/11/18 04:51
2015/11/18 04:55
0
月単位で集計するのは、以下のリンクが役に立つと思います。
mysqlでdate型を月毎に集計する
ただ、目指している集計表にするためには、一工夫必要ですね
【追記】
テーブルが以下のようなものだとして
idx,COUNT_DATE,ACCESS_TYPE,ACCESS_ID,ACCESS_DATE
'1', '2015-10-30', '102', '0', '2015-10-30 11:30:00'
'2', '2015-10-30', '101', '0', '2015-10-30 11:30:00'
'3', '2015-10-30', '202', '1', '2015-10-30 11:30:00'
'4', '2015-09-10', '102', '0', '2015-09-10 11:30:00'
'5', '2015-09-10', '101', '0', '2015-09-10 11:30:00'
'6', '2015-09-10', '103', '0', '2015-09-10 11:30:00'
'7', '2015-09-10', '105', '0', '2015-09-10 11:30:00'
'8', '2015-08-15', '202', '0', '2015-08-15 11:30:00'
'9', '2015-08-10', '201', '0', '2015-08-15 11:30:00'
'10', '2015-08-09', '102', '0', '2015-08-15 11:30:00'
'11', '2015-08-01', '101', '0', '2015-08-15 11:30:00'
'12', '2015-08-01', '101', '0', '2015-08-15 11:30:00'
以下のようなSQLでは、いかがでしょうか?
SQL
1SELECT 2 ACCESS_TYPE, 3 sum(field(DATE_FORMAT(COUNT_DATE,'%Y-%m'),'2015-08')) AS '2015-08', 4 sum(field(DATE_FORMAT(COUNT_DATE,'%Y-%m'),'2015-09')) AS '2015-09', 5 sum(field(DATE_FORMAT(COUNT_DATE,'%Y-%m'),'2015-10')) AS '2015-10' 6from 7 access_record 8group by 9 ACCESS_TYPE
投稿2015/11/18 02:35
編集2015/11/18 03:58総合スコア924
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/18 03:28
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。