Я создаю приложение, которое имеет дело со временем и продолжительностью, а также пересечениями между заданными единицами времени и временем начала / окончания в базе данных, например:
База данных:
Row # | start - end
Row 1 | 1:00 - 4:00
Row 2 | 3:00 - 6:00
Я хочу иметь возможность выбирать суммы времени между двумя определенными моментами времени или ГРУППУ ПО ИНТЕРВАЛУ, чтобы в возвращаемом наборе записей была одна строка для каждой суммы в течение заданного интервала, например:
SELECT length( (start, end) ) WHERE (start, end) INTERSECTS (2:00,4:00)
(в данном случае (начало, конец) - это ПЕРИОД, который является новым типом данных в Postgres Temporal и pg9.2)
который вернется
INTERVAL 3 HOURS
поскольку в строке 1 два часа между 2:00 - 4:00, а в строке 2 - один час в течение этого времени.
Кроме того, я хотел бы иметь возможность:
SELECT "lower bound of start", length( (start, end) ) GROUP BY INTERVAL 1 HOUR
которые я бы хотел вернуть:
1:00 | 1
2:00 | 1
3:00 | 2
4:00 | 2
5:00 | 1
который показывает одну строку для каждого часа в течение данного интервала и сумму времени в начале этого интервала
Я думаю, что для этого можно использовать тип PERIOD, который есть в Postgres Temporal и Postgres 9.2. Однако, насколько я могу судить, в настоящее время они недоступны на Heroku - Итак,
Как я могу включить такую математику на Heroku?