-1

私のテーブル構造は次のとおりです。

CREATE TABLE `survey` (
  `id` int(11) NOT NULL auto_increment,
  `submitdate` datetime default NULL,
 `answer` varchar(5) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=499 ;

ここanswerには、a1、a2、a3 などの値が含まれます。

回答に応じて、過去 10 日間の記録を計算したいと考えています。特定の日に記録がない場合は、ゼロにする必要があります。

私が望む出力は

date         count answer
19-11-2012      10    a1
19-11-2012       8    a2
19-11-2012       0    a3
18-11-2012      30    a1
18-11-2012      30    a2
18-11-2012      30    a3

私は次のようなクエリを使用しました

SELECT days.day, count(survey.id)
FROM
  (select curdate() as day
   union select curdate() - interval 1 day
   union select curdate() - interval 2 day
   union select curdate() - interval 3 day
   union select curdate() - interval 4 day
   union select curdate() - interval 5 day
   union select curdate() - interval 6 day
   union select curdate() - interval 7 day
   union select curdate() - interval 8 day
   union select curdate() - interval 9 day) days
  left join survey
   on days.day = date(survey.submitdate)
group by
  days.day
4

1 に答える 1

0

SUBDATE 関数を使用して 10 日間さかのぼり、'>' を使用して日付を比較できます。また、1 日あたりの個々の回答の数を計算しようとしているため、その日だけでなく回答も GROUP BY する必要があります。

SELECT DATE(submitdate) AS day
answer,
COUNT(*) AS answer_count
FROM survey
WHERE DATE(submitdate) > DATE(SUBDATE(CURRENT_DATE, 10))
GROUP BY day, answer;
于 2012-11-19T17:11:12.380 に答える