首页 文章

在MySQL中加入'time similarity'

提问于
浏览
0

我想知道使用单个select-join查询是否可以实现以下内容 .

假设我们有两个表(两个行都指的是及时发生的一些事件) . 第一个,TableA有以下列:

ID,TimeOfOccurrence,SomeData1

第二个,TableB,看起来类似:

ID,TimeOfOccurrence,SomeData2

TableA和TableB中事件发生的时间总是不同的,因为它们是独立发生的 .

我从TableA中选择事件,例如使用以下查询:

SELECT * FROM TableA WHERE SomeData1 LIKE 'something'

现在我想以下列方式与TableB Build 连接:对于此结果集中的每个事件,我想要从TableB中添加事件的ID和SomeData2,它们发生在最近的位置,假设在10分钟内,相对于特定的行 . 结果集 . 换句话说,我基于TableA和TableB中事件的时间邻接来 Build 连接 .

有没有办法做到这一点?

1 回答

  • 3

    试试这种方法:

    select *
    from A
    join B
    on  A.somedata1 
        between
           B.somedata2 - interval 10 minute
           and
           B.somedata2 + interval 10 minute
    

    演示 - > http://www.sqlfiddle.com/#!2/d7ed9/1

    ----------- EDIT ---------------

    这是一个演示,演示如何选择最接近的匹配
    ---> http://www.sqlfiddle.com/#!2/4b86b/12

    SELECT id1, somedata1, id2, somedata2
    FROM (
    select id1, somedata1,
           min( abs( time_to_sec( somedata1 ) - 
                - time_to_sec( somedata2 ))) d_min
    from A
    join B
    on  A.somedata1 
        between
           B.somedata2 - interval 10 minute
           and
           B.somedata2 + interval 10 minute
    GROUP BY id1
    ) xx
    JOIN B
    ON xx.somedata1 
        between
           B.somedata2 - interval 10 minute
           and
           B.somedata2 + interval 10 minute
       AND abs( time_to_sec( somedata1 ) - 
                - time_to_sec( somedata2 ))
           <= d_min
    

相关问题