0

私はこのようなものを持っています

mysql> explain Order;
+------------------------+-------------------+------+-----+-----------+----------------+
| Field                  | Type              | Null | Key | Default   | Extra          |
+------------------------+-------------------+------+-----+-----------+----------------+
| id                     | int(11) unsigned  | NO   | PRI | NULL      | auto_increment |
| date                   | timestamp         | NO   |     | NULL      |                |
| customer               | int(11) unsigned  | NO   |     | NULL      |                |
| address                | int(11) unsigned  | NO   |     | NULL      |                |
+------------------------+-------------------+------+-----+-----------+----------------+

そして、1 年間ですべてのアクティブな顧客を月ごとにカウントする必要があります。次に例を示します。

SELECT 
  DATE_FORMAT(`date`,'%m/%Y') as period,
  COUNT(DISTINCT(customer)) as total

FROM
  Order

WHERE
  YEAR(`date`) = '2012'

GROUP BY
  period

しかし、DISTINCT を使用した GROUP BY はうまく機能せず、この SQL は同じ期間に多くの結果を返しています。

@editこれは次のようになります

07/2012 1
07/2012 1
06/2012 1
09/2012 1
12/2012 769
06/2012 1
07/2012 1
07/2012 1
06/2012 1
06/2012 1
10/2012 1
... a lot of results with 1 as total

そして、私はこれを期待しています

01/2012 329
02/2012 279
03/2012 229
04/2012 379
05/2012 411
06/2012 152
07/2012 277
08/2012 411
09/2012 468
10/2012 501
11/2012 488
12/2012 593
4

1 に答える 1

1

日付が日時またはタイムスタンプの場合、現在のクエリは機能するはずです。

SELECT DATE_FORMAT(`date`,'%m/%Y') as period,
  COUNT(distinct customer) as total
FROM Orders
WHERE YEAR(`date`) = 2012
GROUP BY period

デモを見る

于 2013-04-01T17:38:03.167 に答える