2

私のテーブル構造は次のようでした

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 ;

ここで、過去10日間のレコードを計算したいと思います。特定の日にレコードがないとします。ゼロである必要があります。

出力は次のようになります

date         count
19-11-2012   10
18-11-2012   30 
13-11-2012   0 
      .
      .

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

SELECT COUNT( * ) , DATE( submitdate ) 
FROM survey t
WHERE t.submitdate >= ( CURDATE( ) - INTERVAL 10 
DAY ) 
GROUP BY DATE( submitdate ) 
LIMIT 0 , 30

出力は

count(*)    date(submitdate)
1   2012-11-13
2   2012-11-14
1   2012-11-15
3   2012-11-16
6   2012-11-17

日付のあるレコードがない場合は0を指定しません。

4

2 に答える 2

8

次のようなものを試して、出力を取得できます。-

 SELECT * FROM survey t WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL -10 DAY);

またはあなたはこれを試すことができます:-

 SELECT * FROM survey t WHERE t.date >= ( CURDATE() - INTERVAL 10 DAY )

Date_Addドキュメントを確認してください

于 2012-11-18T18:29:34.327 に答える
7

これはあなたが必要とするものです:

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 = survey.submitdate
group by
  days.day

(submitdate contanisの日付と時刻の場合は、行on days.day = survey.submitdateをに置き換える必要がありますon days.day = DATE(survey.submitdate)

于 2012-11-18T18:46:31.947 に答える