Select 连接表的最小日期差异

Select Min Datediff from joined tables

我目前在 BigQuery 工作。我有两个表:

Table A {
  id int 
  b_id int
  date timestamp
  }
  
Table B {
  id int 
  long float
  lat float
  date timestamp
}

对于 A 中的一个 b_idB 中有多个条目。我想 有效地 连接两个表,并且只使用 B 中的条目,其中 A.b_id = B.id 并且时间戳之间的差异很小。

我目前的解决方案是:

SELECT A.*, B.*, ABS(DATETIME_DIFF(DATETIME(A.date), DATETIME(B.date), SECOND)) as timeDiff
FROM A
INNER JOIN B
ON A.b_id = B.id    
WHERE ABS(DATETIME_DIFF(DATETIME(A.date), DATETIME(B.date), SECOND)) = 
(
SELECT MIN(ABS(DATETIME_DIFF(DATETIME(B2.date), DATETIME(A2.date), SECOND)))
FROM B as B2 
INNER JOIN A as A2
ON B2.driverId = A2.driverId
GROUP BY A2.driverId, B2.rideId
)

问题是单个条目需要花费很多时间。 关于如何改进查询有什么建议吗?

您可以使用 window 函数:

select *
from (
    select a.*, b.*, 
        row_number() over(
            partition by a.b_id
            order by abs(datetime_diff(datetime(a.date), datetime(b.date), second))
        ) rn
    from a
    inner join b on a.b_id = b.id  
) t
where rn = 1