0

我想知道是否可以使用单个选择连接查询来实现以下目标。

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

ID,TimeOfOccurrence,SomeData1

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

ID,TimeOfOccurrence,SomeData2

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

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

SELECT * FROM TableA WHERE SomeData1 LIKE 'something'

现在我想通过以下方式与 TableB 进行连接:对于此结果集中的每个事件,我想添加来自 TableB 的事件的 ID 和 SomeData2,它发生在最近的事件中,假设在 10 分钟间隔内,相对于特定行结果集。换句话说,我根据 TableA 和 TableB 中事件的时间相邻性进行连接。

有没有办法做到这一点?

4

1 回答 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



----------- 编辑 ----------------

这是一个演示,其中有一个示例如何选择最接近的匹配
---> 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
于 2013-09-10T19:19:00.277 回答