Возможно, вы сможете сделать это в режиме реального времени.Вы можете предварительно агрегировать за каждый день.Представьте себе следующее материализованное представление:
CREATE VIEW preAggregatedByDate
SELECT gender, ageGroup, country, date, COUNT(*) AS dailyCount
FROM myTable
GROUP BY date;
Итак, у вас есть счетчик для каждой комбинации ваших параметров (пол, возрастная группа и страна) за каждую дату.Для вашего запроса вы должны сделать что-то вроде:
SELECT COUNT(*)
FROM preAggregatedByDate
WHERE gender = 'Female' AND ageGroup = '15_25' AND country = 'UK' AND
date >= '20110901' AND date < '20111101';
Очевидно, что это не будет так просто (и вы можете не использовать SQL и материализованные представления), но это может быть лучшим способомпредставить это, если вы знакомы с обычными базами данных.Ваш фактический запрос извлекает данные только из сильно сокращенного, предварительно агрегированного источника данных.
Если вы не против подождать несколько часов после окончания дня, чтобы выполнить запросы в этот день,Самым простым решением может быть использование Hadoop для вычисления предварительно агрегированных данных и помещения их в какую-то обычную базу данных, к которой затем можно запускать запросы.