SELECT 'tc_date', count(*) as 'count' FROM TABLE WHERE tc_date >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) GROUP_BY( DAY('tc_date')
Это решение, которое кажется правильным и простым, если бы не
И если допустим на неделе в какой-то день, не было записей, то выводить 0!
Если записей на какое то число нет, то в выборку они не попадут, следовательно не будут сгруппированы и в результате записей с нулём не будет.
Тут я вижу два варианта решения:
1. Держать таблицу со всеми нужными датами и делать к ней LEFT OUTER JOIN нужной таблицы.
2. Либо писать хранимую процедуру, формирующую нужный результат.