【问题标题】:Joining on a timestamp within 30 seconds of each other?在 30 秒内加入时间戳?
【发布时间】:2020-03-11 03:02:01
【问题描述】:

我有一个查询,我试图加入一个时间戳,但由于一个表中没有确切的时间戳,并且只有每 30 秒一次,我可以在那个条件下加入吗?

SELECT * FROM table loc
LEFT JOIN table dest ON loc.id = dest.id AND loc.timestamp = dest.timestamp

除了加入的第二个 ON 部分之外,如果 loc.timesamp = dest.timestamp 如果它们在彼此之间的 30 秒内,我希望它是这样的

谢谢

【问题讨论】:

    标签: sql data-science data-analysis presto sql-timestamp


    【解决方案1】:

    考虑:

    SELECT * 
    FROM table loc
    LEFT JOIN table dest 
        ON loc.id = dest.id 
        AND loc.timestamp 
            BETWEEN dest.timestamp - interval '30' second
            AND dest.timestamp + interval '30' second
    

    虽然这会起作用;您需要考虑dest 表中存在多条记录以及连接间隔的风险。如果发生这种情况,那么您最终会在结果集中得到重复的 loc 记录。根据您的数据,这可能会发生也可能不会发生。

    【讨论】:

      【解决方案2】:

      你可以这样表达:

      SELECT *
      FROM table loc LEFT JOIN
           table dest
           ON loc.id = dest.id AND
              loc.timestamp >= dest.timestamp - INTERVAL '30' SECOND AND
              loc.timestamp <= dest.timestamp + INTERVAL '30' SECOND;
      

      【讨论】:

        猜你喜欢
        • 2018-10-25
        • 1970-01-01
        • 2017-08-27
        • 2021-12-11
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多