ИЗМЕНЕНО для включения сценария «CREATE TABLE» для тех, кто нуждается в меньшем количестве абстракций (см. Нижнюю часть вопроса)программа », которая содержит время запуска / остановки, и каждая программа может запускать одну или несколько« станций »(клапаны или разбрызгиватели или что-то еще), которые работают со своими собственными временами запуска / остановки, контролируемыми« программой ».См. Блок ниже для приблизительного примера с последующим объяснением.
|<---- Program 1 ----------------------------------------------->|
|<-- Station 1 -->| |<---- Station 2 ---->|<---- Station 3 --->|
|<---- Program 2 ---------------------------------------->|
|<---- Station 4 ---->|<---- Station 5 -->|
|<---- Program 3 --->|
|<---- Station 6 -->|
|<-- Master Pump Fail Alarm -->|
В вышеприведенном «псевдо-расписании» программа 1 имеет 3 работающих станции, а программа 2 - 2 работающих.Программа 3 имеет одну станцию.Главный насос выходит из строя именно тогда, когда станция 5 в программе 2 запускается, но сигнал тревоги заканчивается (может быть, он был исправлен?) После завершения программы 2, но все еще в течение времени выполнения программы 1. Стрелки показывают время запуска и остановки, а также диапазон времени выполнения события..
По сути, я пытаюсь выяснить алгоритм предложения WHERE в соответствии с чем-то вроде:
SELECT stuff WHERE "a program's or station's running time occurred *during* the alarm period (alarm.begintime to alarm.endtime in the schema below)".
Результат для этого с использованием приведенного выше примера расписания должен вернуть списокзаписи, которые включают Программу 1 со Станциями 2 и 3 и Программу 2 только со Станцией 5.
Время начала и окончания для Программ, Станций и Сигналов тревоги записывается в базу данных в EPOCH / UNIXTIME.Ядром базы данных является PostgreSQL 9.6.5 на x86_64-pc-linux-gnu.
Если что-то нуждается в дополнительных разъяснениях, пожалуйста, спросите.Заранее благодарим за любые лакомые кусочки, помогающие решить проблему.
Схема ниже должна создать макет, подобный блоку визуализации выше:
CREATE TABLE test(
oid PRIMARY KEY,
itemid INTEGER,
itemtype VARCHAR (255),
begintime INTEGER,
endtime INTEGER
);
INSERT INTO test VALUES (1, 1, 'Program', 1556809522, 1556809680);
INSERT INTO test VALUES (2, 1, 'Station', 1556809522, 1556809560);
INSERT INTO test VALUES (3, 2, 'Station', 1556809620, 1556809642);
INSERT INTO test VALUES (4, 3, 'Station', 1556809642, 1556809680);
INSERT INTO test VALUES (5, 2, 'Program', 1556809522, 1556809670);
INSERT INTO test VALUES (6, 4, 'Station', 1556809541, 1556809630);
INSERT INTO test VALUES (7, 5, 'Station', 1556809630, 1556809660);
INSERT INTO test VALUES (8, 3, 'Program', 1556809522, 1556809618);
INSERT INTO test VALUES (9, 6, 'Station', 1556809522, 1556809617);
INSERT INTO test VALUES (10, 1, 'Alarm', 1556809630, 1556809675);