Формирование истории из нескольких таблиц в PostgrSQL

Есть три таблицы (прилагаются):

  • Таблица ObjectsHistory oh - история Объектов. У Объектов есть статусы. Бывает, что у Объекта нет статуса (не проставлен),
  • Таблица PackagesHistory ph - история Пакетов. У Пакетов есть статусы. Бывает, что у Пакета нет статуса (не проставлен),
  • Таблица ObjectToPackage op - связи объектов с пакетами. Объекты могут находиться в Пакетах, перемещаться между Пакетами, а также могут находиться вне Пакетов. В один момент времени Объект может быть только в одном Пакете либо вне Пакетов.

Как сформировать результирующую таблицу, в которой отображается история всех событий до текущей даты (текущая дата задается как входящий параметр)? -

  • история изменения статусов объектов,
  • история изменения принадлежности объектов к пакетам,
  • история изменения статусов пакетов.

Сначала выбрать неповторяющиеся Объекты и даты изменения их Статусов. По этой выборке определить:

  • как менялось отношение ObjectToPackage op,
  • как менялись статусы пакетов в PackagesHistory ph.

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

  • все изменения статусов объектов, Id выводится в строке, где событие ObjectStatusChange,
  • все перемещения объектов между пакетами, Id выводится в строке, где событие ObjectToPackageChange
  • все изменения статусов пакетов, начиная с даты вхождения объекта в пакет, указанной в колонке B, до даты вхождения в следующий пакет (либо выхождения из пакетов вообще). Id выводится в строке, где событие PackageStatusChange Если в дату вхождения объекта в пакет не осуществлялась смена статуса пакета, то указывается его текущий статус на эту дату. Если от последней даты в колонке B до текущей даты производилась смена статуса пакета, то выводятся все такие даты.

Прилагается файл, в котором на первом листе - три таблицы, заполненные исходными данными, а на втором листе - конечный результат (т.е. вручную по исходным данным собрана таблица с общей историей). На листах "Промежуточный результат" показан процесс сборки конечного результата с использованием формул в Excel.

Ссылка на файл "Таблицы" с листами "Исходные данные", "Конечный результат".


Ответы (0 шт):