Ошибка возврата значений на основе диапазона дат Postgresql - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть запрос на получение значений за последние 5 лет каждого месяца, он работает до тех пор, пока вы не прибудете через несколько месяцев с другим последним днем ​​(например, 31 или 29)

   SELECT isin, nominal_comulativo , periodo_base
   FROM lamina_perfil
   WHERE isin = 'PERFIL 2020'
   AND periodo_base >= date '2019-03-31' - INTERVAL '5 years'
   AND periodo_base <=  '2019-03-31'

Мой результат выглядит примерно так:

+----------------+--------------------+--------------+
|     ISIN       | nominal_comulativo | periodo_base |
+----------------+--------------------+--------------+
| PERFIL 2020    | 1.04               | 2014-03-31   |
+----------------+--------------------+--------------+
| PERFIL 2020    | 2.45               | 2014-04-30   |
+----------------+--------------------+--------------+
| PERFIL 2020    | 1.34               | 2014-05-30   |
+----------------+--------------------+--------------+
| PERFIL 2020    | 1.34               | 2014-06-30   |
+----------------+--------------------+--------------+
| PERFIL 2020    | 1.34               | 2014-07-31   |
+----------------+--------------------+--------------+
| PERFIL 2020    | 1.34               | 2014-08-29   |
+----------------+--------------------+--------------+

Но когда я устанавливаю другое условие WHERE, например

period_base> = date '2019-02-31' - INTERVAL '5 years'
AND period_base <= '2019-02-31'

Это выдает мне значение поля даты / времени ошибки вне диапазона:"2019-02-31" '
кто-то еще?

Ответы [ 2 ]

1 голос
/ 11 декабря 2019

Postgres достаточно гибок в понимании интервалов дат, поэтому вы можете выразить свои условия следующим образом:

periodo_base >= date'2019-04-01' - interval '1 day 5 years'
and periodo_base <=  date'2019-04-01' - interval '1 day'

Это можно немного сократить с помощью between:

periodo_base 
    between date'2019-04-01' - interval '1 day 5 years' 
    and date'2019-04-01' - interval '1 day'
0 голосов
/ 12 декабря 2019

Предпочитают полуоткрытые интервалы


SELECT isin, nominal_comulativo , periodo_base
FROM lamina_perfil
WHERE isin = 'PERFIL 2020'
AND periodo_base >= date '2019-04-01' - INTERVAL '5 years'
AND periodo_base < '2019-04-01'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...