Заполнение таблицы в PostgreSQL и логика c формулировка - PullRequest
0 голосов
/ 18 апреля 2020

Мне нужна помощь в заполнении таблицы.

Первый У меня есть inventory table, в котором содержатся все мои данные, и он уже заполнен. Первичный ключ для этой таблицы: terminal_id

Секунда У меня есть еще одна таблица, down_event table, которая содержит все события отключения каждого компьютера в таблице инвентаризации. Он включает столбец: terminal_id, event_description down_date , down_time , and down_duration_sec` и уже заполнен.

Мне нужно заполнить availability table, который содержит все доступные время машин на inventory table. Столбцы: terminal_id (первичный ключ), availability_date (первичный ключ), availability_time (первичный ключ), duration_se c.

Подвох в том, что каждый terminal_id должен иметь 1-часовой интервал в один день, означающий 00:00:00 до 23:59:59 для одного Terminal_id.

Так, например:

    terminal_id       availability_time
   _____________     ___________________
    012345678          00:00:00
    012345678          01:00:00
    012345678          02:00:00
    012345678          03:00:00

Так далее и так далее до 23:00:00. Мне нужна помощь для того, чтобы сделать это так, как показано на рисунке:

availability_table

Другой уловкой является то, что Availability_Date придет из down_event table. В down_event table каждый terminal_id имеет разные down_date, которые будут отражаться на availability table, поэтому на рисунке 2019-09-01 повторяется.

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

1 Ответ

2 голосов
/ 18 апреля 2020

Если я правильно понимаю, следующий запрос генерирует требуемые результаты:

select td.terminal_id, td.down_date, (hh * interval '1 hour')::time
from (select distinct terminal_id, down_date
      from down_event_table
     ) td cross join
     generate_series(0, 23) gs(hh);

Затем вы можете вставить эти строки в таблицу доступности.

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