2014-07-15 58 views
3

我試圖通過匹配它們的時間戳字段加上或減去一秒來連接兩個表。模糊時間戳加入Postesql並實現更好的速度

SELECT t1.id, t2.id 
FROM ctc.table1 t1 
    INNER JOIN ctc.table2 t2 
     ON EXTRACT(EPOCH FROM t1.timestamp) 
      BETWEEN EXTRACT(EPOCH FROM t2.timestamp) - 1 
       AND EXTRACT(EPOCH FROM t2.timestamp) + 1 

是否有更高性能的方式來編寫此查詢?

+0

如果存在多個匹配,你想要嗎?你能把時代分成3秒的時間間隔,然後進行比較嗎? –

+0

不,因爲如果兩個記錄在「三個第二紀元的轉向」之前稍微有點稍微之後略有差別,那麼兩個非常接近的記錄將不匹配。 – mattalxndr

+0

我對PostgreSQL不太熟悉,但我知道它有LATERAL JOIN(類似於SQL Server中的APPLY概念)。你不能使用它嗎?類似於(僞代碼)「FROM ctc.table1 t1 LATERAL(SELECT ... FROM table2 t2 WHERE t2.timestamp between t1.timestamp - 1 and t1.timestamp + 1)? – Ruslan

回答

0

正如已經發表的意見指出戴爾通過克雷格·林格提出的

ON t1."timestamp" BETWEEN 
    t2."timestamp" - INTERVAL '1' SECOND AND 
    t2."timestamp" + INTERVAL '1' SECOND 

變體可以使用通用的指標,而你只能使用專門爲特定目的建造指標像

create index the_index_name on ctc.table1(extract(epoch from timestamp))