Как заполнить таблицу интервалами данных на postgresql с помощью функции - PullRequest
0 голосов
/ 06 июля 2018

У меня есть следующие таблицы:

enter image description here enter image description here

Мне нужно создать / заполнить третью таблицу следующим образом:

enter image description here

Я нарисовал клетки, чтобы их было легче понять. Если бы мне нужно было написать то, что мне нужно, было бы следующее:

Между 2018-06-05 и 2018-06-19 значение равно 50.

Между 2018-06-19 и 2018-06-21 значение равно 150.

Между 2018-06-21 и 2018-06-25 значение равно 180.

Между 2018-06-25 и 2018-07-05 значение равно 200.

Мне нужно создать функцию, чтобы сделать это, но я не могу этого сделать, я провожу весь день, думая об этой проблеме, но, к несчастью, я не могу разработать сценарий.

Я пытался использовать некоторые WHILE, но .... не удалось.

enter image description here

1 Ответ

0 голосов
/ 06 июля 2018

Хммм. Я думаю, вы можете union all таблицы вместе, а затем использовать функции окна, чтобы заполнить детали:

select date as startdate,
       lead(date) over (order by date) as enddate,
       coalesce(newv,
                lead(prev) over (order by date)
               ) as value
from ((select date, null as prev, null as newv
       from table1
      ) union all
      (select dateupdate, prev, newv
       from table2
      )
     ) tt;

Это добавляет дополнительную строку для последней даты. Если вы этого не хотите, вы можете удалить его, используя дополнительный подзапрос и отфильтровав его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...