Я пытаюсь объединить две таблицы в Postgres, которые имеют несколько разные временные метки. Данные имеют определенный шаблон
Таблица 1 может выглядеть следующим образом:
Table 1
number timestamp
2 2016-11-14 12:01:55
2 2016-11-14 12:01:57
2 2016-11-14 12:05:55
2 2016-11-14 12:05:57
2 2016-11-14 12:09:55
2 2016-11-14 12:09:57
Table 2
number timestamp
2 2016-11-14 12:01:45
2 2016-11-14 12:01:47
2 2016-11-14 12:05:45
2 2016-11-14 12:05:47
2 2016-11-14 12:09:45
2 2016-11-14 12:09:47
Я могу объединить их на основе ближайшей отметки времени, например:
Table merged
number timestamp1 timestamp2
2 2016-11-14 12:01:55 2016-11-14 12:01:47
2 2016-11-14 12:01:57 2016-11-14 12:01:47
2 2016-11-14 12:05:55 2016-11-14 12:05:47
2 2016-11-14 12:05:57 2016-11-14 12:05:47
2 2016-11-14 12:09:55 2016-11-14 12:09:47
2 2016-11-14 12:09:57 2016-11-14 12:09:47
Однако теперь одна строка используется несколько раз во время соединения. Я хотел бы использовать каждую строку только один раз при объединении, чтобы моя объединенная таблица выглядела следующим образом:
Table merged
number timestamp1 timestamp2
2 2016-11-14 12:01:55 2016-11-14 12:01:45
2 2016-11-14 12:01:57 2016-11-14 12:01:47
2 2016-11-14 12:05:55 2016-11-14 12:05:45
2 2016-11-14 12:05:57 2016-11-14 12:05:47
2 2016-11-14 12:09:55 2016-11-14 12:09:45
2 2016-11-14 12:09:57 2016-11-14 12:09:47
Есть идеи, как мне этого добиться в Postgresql? Это мой текущий код. Я не знаком с Postgres, поэтому он может быть немного грязным
select DISTINCT ON (timestamp1) *
from
( select * from(
select
number, timestamp1
from table1) as tmp_t1
LEFT JOIN
(select *
from
(select
number, timestamp2
from table2
) as tmp2
)
as foo on foo.number=tmp_t1.number
where timestamp2 BETWEEN timestamp1
AND timestamp1 + interval '10 sec') as table_merged