Похоже, что на самом деле у вас нет никаких требований:
Переход с отметки времени на только часть даты является большой проблемой.Вы никогда не хотите проводить анализ времени дня?например, какое время суток лучше проводить для техобслуживания, если это останавливает "foo".
А вас не беспокоит размер?Вы говорите, что у вас есть миллионы записей (как это много), а затем вы расширяете каждую строку на дополнительный столбец.Один столбец не много, пока количество строк не взлетит до небес, и тогда вам действительно нужно подумать о каждом столбце.
Таким образом, чтобы получить сумму событий за последние 3 дня, вам лучше сделать это
SELECT SUM(totcnt) FROM (
SELECT MAX(Total_count) as totcnt from table where date = today and event = 'Foo'
UNION ALL
SELECT MAX(Total_count) from table where date = today-1 and event = 'Foo'
UNION ALL
SELECT MAX(Total_count) from table where date = today-2 and event = 'Foo'
)
Да, это выглядит намного проще, чем>
SELECT COUNT(*) FROM table WHERE DATE BETWEEN today-2 and today and event = 'foo'
И подумайте о триггере, который потребуется для добавления строки ... получите максимум для этого дня и события и добавьте один... каждый раз, когда вы вставляете?
Не уверен, какой у вас сервер, но я суммировал 1 миллион строк за 285 мс.Итак ... сколько у вас будет миллионов и сколько раз вам нужно их сложить, и каждый раз для одного и того же диапазона дат или совершенно случайно?