テーブル内のユーザごとに異なる時間を費やしています。期間は重複しており、私はそれを修正したいと思います。私は持っている:PostgreSQL、重複期間の発見と修正
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
ie。ユーザ1は2015-01-01でユニット1で開始し、2015-01-07でユニット2に転送し、2015-01-14でユニット1に戻り、2015-01-31でユニット1を戻しました。ユーザーは一度に2か所にいることはできませんので、テーブルは次のようになります。
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
いくつかのエントリを持つテストテーブルを作成するためのSQLがあります。
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');
3つのユニットが重なっている場合はどうなりますか? –
まあ私のデータは2つのユニットしか持っていないので、3つは重なり合うことはできませんが、一般的に後発イベントは前回開始イベントを終了し、後発イベントが終了しても早期開始が続く場合でも、元の終了時刻まで。オーバーラップするイベントが2つ以上ある場合、後者は常に前の開始を終了し、開始時間の順番を守る必要があります。 –