これがあなたが必要としているものと正確に一致しない場合、それはあなたに何らかの方法をもたらすか、あなたにいくつかのアイデアを与えるかもしれません:
SELECT contest_id, YEAR(submission_date) AS submission_period, COUNT(*),
"Y" AS sub_type
FROM submissions
GROUP BY 1, 2
UNION ALL
SELECT contest_id, MONTH(submission_date) AS submission_period, COUNT(*),
"M" AS sub_type
FROM submissions
GROUP BY 1, 2
UNION ALL
SELECT contest_id, DAY(submission_date) AS submission_period, COUNT(*),
"D" AS sub_type
FROM submissions
GROUP BY 1, 2
ORDER BY 1, 4, 2
ただし、月を個別に表示するのではなく、月ごと、または週を表示する場合は、データウェアハウスアプリケーションで使用されるような「時間ディメンション」の作成を検討することを強くお勧めします。これは、次のように見える毎日のレコードを含むテーブルです。
Date Year Month Week Quarter Day MthName
2013-01-01 | 2013 | 2013-01 | 2013W01 | 2013Q1 | Tues | January
2013-01-02 | 2013 | 2013-01 | 2013W01 | 2013Q1 | Wed | January
..
2013-03-20 | 2013 | 2013-03 | 2013W12 | 2013Q1 | Wed | March
..
2013-05-01 | 2013 | 2013-05 | 2013W18 | 2013Q2 | Wed | May
提出日をこのテーブルに参加させることで、要件に合った列でグループ化できます。
上級者向けのヒント:これらのヘッダーにラベルを付けたものとは呼ばないでください。予約語を使用すると、問題が発生します:-)