Как создать временной ряд в PostgreSQL?


9

Если вы хотите создать серию дат, посмотрите этот вопрос

Допустим, я хочу генерировать серию каждые 5 минут в течение 24 часов. Как мне это сделать в PostgreSQL?

PostgreSQL может generate_series()из timestamp, но не из time.

Лучше выбрать произвольную временную метку или есть другой способ генерации серии?

Ответы:


14

Для оптимизации:

SELECT x::time
FROM   generate_series(timestamp '2000-01-01 00:00'
                     , timestamp '2000-01-02 00:00'
                     , interval  '5 min') t(x);

Дата не имеет значения, поэтому используйте произвольные константы меток времени. Актерский состав timeочень дешевый.
Это включает в себя нижнюю и верхнюю границу, поэтому мы получаем в '00:00' два раза . Используйте в '2000-01-01 23:59'качестве верхней границы, чтобы получить его только один раз.

Связанные с:


Я нахожу что-то о произвольной дате очень уродливым. Но я думал, что на самом деле это будет быстрее и лучше.
Эван Кэрролл

Поскольку дата не имеет значения, она также может быть произвольной. Это самый быстрый способ.
Эрвин Брандштеттер

7

Не уверен, что это лучший способ, но мы можем использовать его generate_seriesдля генерации минимального смещения, 00:00:00а затем просто вызвать его, make_interval(mins=>)чтобы получить интервал.

SELECT make_interval(mins=>x)::time
FROM generate_series(0, 60*24-5, 5) AS t(x);

5

Мне понравился способ @EvanCarroll, но еще один вариант -

select  x::time
from    generate_series 
            (current_date,current_date + '1 day - 1 second'::interval,'5 minute') as t(x);

Это будет работать только иногда в некоторых местах. Это зависит от DST Borking. Смотрите мой ответ здесь для получения дополнительной информации.
Эван Кэрролл

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.