0

重複の可能性:
MySQL クエリ GROUP BY 日/月/年

私は次のmysqlを持っています:

SELECT MONTH( FROM_UNIXTIME(  `timeStamp` ) ) as month , COUNT(  `id` )  as count
FROM  `discusComments` 
GROUP BY MONTH( FROM_UNIXTIME(  `timeStamp` ) ) 
ORDER BY  MONTH( FROM_UNIXTIME(  `timeStamp` ) ) ASC 
LIMIT 15

過去 15 か月間の 1 か月あたりのエントリ数を取得します。過去 12 か月しか表示されないのはなぜだろうと思っていましたが、カウントがすべての年の集計であり、月ごとに一意ではないことに気付きました。したがって、12 月の値は 2012 年と 2011 年を合わせたものになります。

これは欲しくない。過去 15 か月と UNIQUE 月の年 (2012 年 12 月、2012 年 11 月など) のエントリ数を取得したいと考えています。

4

3 に答える 3

1

年をSELECT列リストに追加し、エイリアスも追加しGROUP BYます。

SELECT YEAR(FROM_UNIXTIME(`timestamp`))  AS year, 
       MONTH(FROM_UNIXTIME(`timestamp`)) AS month, 
       COUNT(`id`)                       AS count 
FROM   `discuscomments` 
GROUP  BY year, 
          month 
ORDER  BY year,
          month
LIMIT  15 
于 2012-12-16T20:54:06.707 に答える
1

これについて私が持っている最も簡単なアイデアは、通常、日付値の形式を一意でわかりやすい文字列に変更することです。たとえば、2012 年 12 月の場合は 2012-12、2011 年 10 月の場合は 2011-10 などです。

そのために使用できる機能は次のDATE_FORMAT()とおりです。

 DATE_FORMAT(FROM_UNIXTIME(timeStamp), '%Y-%m')

これらの文字列は、ASC などのように簡単に並べ替えることができます。

2011-10
2011-11
2011-12
...
2012-10
2012-11
2012-12

SQL クエリの例:

SELECT
  DATE_FORMAT(FROM_UNIXTIME(timeStamp), '%Y-%m') as month, 
  COUNT(id) as count
FROM  discusComments
GROUP BY month
ORDER BY month ASC 
LIMIT 15
于 2012-12-16T20:55:25.823 に答える
0

これを試して

months_between(to_date ('2009/05/15', 'yyyy/mm/dd'), 
                     to_date ('2009/04/16', 'yyyy/mm/dd'))
于 2012-12-16T21:01:01.850 に答える