31

パブリッシャーのさまざまなレコードを含むテーブルがあり、各レコードにはタイムスタンプ型の列に日付があります。

id | id_publisher | date
1           1      11/2012 03:09:40 p.m.
2           1      12/2012 03:09:40 p.m.
3           2      01/2013 03:09:40 p.m.
4           3      01/2013 03:09:40 p.m.
5           4      11/2012 03:09:40 p.m.
6           4      02/2013 03:09:40 p.m.
7           4      02/2012 03:09:40 p.m.

各パブリッシャーが毎月発行したレコード数をカウントする必要があります。例えば

Month    |  id_publisher         | num
11/2012  |          1            |   1
11/2012  |          2            |   0
11/2012  |          3            |   0
11/2012  |          4            |   1
.....
02/2013  |          4            |   2

で試しました select count(id) from raw_occurrence_record group by month(date), id_publisher;

しかし、うまくいきませんでした。

4

1 に答える 1

42

datetimeあなたの日付が実際の列であると仮定すると:

SELECT MONTH(date), YEAR(date), id_publisher, COUNT(*)
FROM raw_occurrence_record
GROUP BY MONTH(date), YEAR(date), id_publisher

次のように月と年を連結できます。

SELECT CONCAT(MONTH(date), '/', YEAR(date)) AS Month, id_publisher, COUNT(*)
FROM raw_occurrence_record
GROUP BY MONTH(date), YEAR(date), id_publisher

レコードがない月を見つけるには、日付テーブルが必要です。作成できない場合は、次UNION ALLのようにカレンダー テーブルを作成できます。

SELECT a.year, a.month, b.id_publisher, COUNT(b.id_publisher) AS num
FROM
  (SELECT 11 AS month, 2012 AS year
   UNION ALL
   SELECT 12, 2012
   UNION ALL
   SELECT 1, 2013
   UNION ALL
   SELECT 2, 2013) a
LEFT JOIN raw_occurence_record b
  ON YEAR(b.date) = a.year AND MONTH(b.date) = a.month
GROUP BY a.year, a.month, b.id_publisher

デモを見る

于 2013-01-15T18:56:31.803 に答える