Вы захотите сделать это в двух частях.
Сначала вы захотите получить соответствующие данные из базы данных. Вероятно, лучше всего это можно сделать, например:
SELECT country, year(join_date) as year, month(join_date) as month, count(*)
FROM trackingTable
WHERE join_date between :start_date and :end_date
GROUP BY country, year(join_date), month(join_date)
ORDER BY country, year, month
Для ваших данных будет сгенерирован следующий пример:
Country Year Month Count
==================================
Germany 2011 6 1
Ireland 2011 5 1
Italy 2011 7 1
USA 2011 1 1
Во-вторых (и я предполагаю, что вы создаете / форматируете отчет на внешнем языке), последовательно просматривайте данные. Учитывая ORDER BY
, каждая страна будет отдельной последовательностью. Псуедо-код для ваших нужд:
for each row in set {
if different country {
total up row, start new line
}
add month cell to column;
add month cell to month grand total;
}
total up grand total row, print/save