Postgres Generate_Series возвращает неверное количество результатов - PullRequest
0 голосов
/ 21 октября 2018

Я хотел бы сгенерировать серию временных меток, используя generate_series() Постгреса, но он возвращает неверное количество результатов:

select generate_series(
                 now() - interval '1 year',
                 now(),
                 interval '1 year' / 365
                     );

Я ожидал бы 365 результатов, но он возвращает 371 результат.

Каждый интервал в результатах представляет чуть меньше суток, но я не могу понять, почему.

2017-10-21 19:21:01.355108
2017-10-22 19:01:17.761508
2017-10-23 18:41:34.167908
2017-10-24 18:21:50.574308
2017-10-25 18:02:06.980708
2017-10-26 17:42:23.387108

1 Ответ

0 голосов
/ 22 октября 2018

Интервал «1 год» не равен 365 дням, поэтому вы получаете более 365 строк.Я предполагаю, что вы хотите иметь серию меток дат от 1 года до настоящего момента для каждого дня>

select generate_series(
             now() - interval '1 year' ,
             now(),
             interval '1 day'
                );

Вы получите 366 строк, а не 365, поскольку вы начинаете ровно 1 год назад, поэтому это будет 366 временных меток(1 год раньше - это ваша начальная дата серии +365 [или 366, если год будет високосным годом] следующих дней)

Если вы хотите, чтобы без первой отметки времени, добавьте «интервал« 1 день »кПервый аргумент.

...