如何联接具有相同日期但不同时间的两个表,以便选择最接近的时间?

时间:2019-05-06 20:25:00

标签: sql apache-spark-sql

我试图离开一个Notes表,以便用户在每天的特定时间将Notes上传到带有日期和时间的Score表中。日期必须相同,但是在Notes中,每次都需要选择比值小于/等于时间的最接近时间的匹配项。这是预期结果的示例:

Notes Table

Scores Table

Results Table

1 个答案:

答案 0 :(得分:0)

嗯,假设日期是相同的,数据爆炸可能不会那么糟糕。因此,进行联接,然后使用窗口函数进行过滤:

select sn.*
from (select s.*, n.n,
             row_number() over (partition by s.date, s.time order by n.time desc) as seqnum
      from scores s left join
           notes n
           on s.date = n.date and s.time >= n.time
     ) sn
where seqnum = 1;