Какую базу данных я использую?
Я использую PostgreSQL 9.5.
Что мне нужно?
Это часть моих data_store
таблиц:
id | starttime
-----+----------------------------
185 | 2011-09-12 15:24:03.248+02
189 | 2011-09-12 15:24:03.256+02
312 | 2011-09-12 15:24:06.112+02
313 | 2011-09-12 15:24:06.119+02
450 | 2011-09-12 15:24:09.196+02
451 | 2011-09-12 15:24:09.203+02
452 | 2011-09-12 15:24:09.21+02
... | ...
Я хотел бы создать запрос, который будет подсчитывать записи за определенный интервал времени. Например, для временного интервала в 4 секунды запрос должен вернуть мне что-то вроде этого:
starttime-from | starttime-to | count
---------------------+---------------------+---------
2011-09-12 15:24:03 | 2011-09-12 15:24:07 | 4
2011-09-12 15:24:07 | 2011-09-12 15:24:11 | 3
2011-09-12 15:24:11 | 2011-09-12 15:24:15 | 0
... | ... | ...
Самое важное:
- Интервал времени зависит от выбора пользователя. Это может быть
1 second
,37 seconds
,50 minutes
или какая-то смесь:2 month and 30 mintues
. Доступные единицы для временного интервала:millisecond
,second
,minute
,hour
,day
,month
,year
. Как видите, мне нужен какой-то общий/универсальный запрос для этого, НО я мог бы также создать несколько запросов для каждого модуля - это не проблема. - Запрос должен быть оперативным, т.к. я работаю с большой базой данных (20 миллионов строк и более, но в запросе я использую только часть этой базы, например: 1 миллион).
Вопрос в следующем: Как должен выглядеть запрос, чтобы добиться этого?
Я попытался преобразовать решения, которые нашел в следующих темах, но мне это не удалось:
- PostgreSQL: подсчет строк для запроса "по минутам",
- Группировать по интервалам данных,
- Лучший способ подсчета записей по произвольным временным интервалам в Rails+Postgres.
Что я имею?
Я удалил этот раздел своего поста для большей прозрачности поста. Этот раздел не был необходим, чтобы дать ответ на мой вопрос. Если хотите посмотреть, что здесь было, загляните в историю поста.