Ich habe Zeiträume in verschiedenen Einheiten pro Benutzer in einer Tabelle verbracht. Die Zeiträume überschneiden sich und ich möchte das beheben. Ich habe:PostgreSQL, überlappende Zeiträume finden und fixieren
user|unit|start_time|end_time
1| 1|2015-01-01|2015-01-31
1| 2|2015-01-07|2015-01-14
2| 1|2015-01-09|2015-01-13
2| 2|2015-01-10|2015-01-15
dh. Benutzer 1 wurde am 01.01.2015 von Gerät 1 gestartet, am 07.01.2015 in Gerät 2 übertragen, am 14.01.2015 in Gerät 1 und am 31.01.2015 von Gerät 1 zurückgeliefert. Der Benutzer kann nicht an zwei Orten zugleich sein, so die Tabelle wie folgt aussehen sollte:
user|unit|start_time|end_time
1| 1|2015-01-01|2015-01-07 --fixed end_time
1| 2|2015-01-07|2015-01-14
1| 1|2015-01-14|2015-01-31 --newly created line
2| 1|2015-01-09|2015-01-10 --fixed end_time
2| 2|2015-01-10|2015-01-15
Hier einige SQL ist die Test-Tabelle mit einigen Einträgen zu erstellen.
CREATE TABLE users_n_units
(
users character varying (100),
units character varying (100),
start_time date,
end_time date
);
INSERT INTO users_n_units (users,units,start_time,end_time)
VALUES ('1','1','2015-01-01','2015-01-31'),
('1','2','2015-01-07','2015-01-14'),
('2','1','2015-01-09','2015-01-13'),
('2','2','2015-01-10','2015-01-15');
Was ist, wenn 3 Einheiten sich überlappen? –
Nun, meine Daten haben nur zwei Einheiten, also kann sich 3 nicht überlappen, aber im Allgemeinen beendet das später startende Ereignis das früher beginnende Ereignis und wenn das frühergehende auch nach dem späteren Start noch weitergeht, beginnt es wieder und setzt sich fort bis zu seiner ursprünglichen Endzeit. Wenn es mehr als 2 überlappende Ereignisse gibt, beendet das letztere immer das vorhergehende und die Reihenfolge der Startzeiten sollte eingehalten werden. –