加入日期范围

时间:2020-02-07 16:13:16

标签: mysql date join range date-range

我已经查看了该问题的其他答案,但没有找到解决方法。

我有两个具有跟踪号的表,一个表具有状态历史记录,每个跟踪有几条记录,每种状态的日期时间不同。另一个表是成本表,每个跟踪都有一条记录,其日期时间与状态表的一般时间段相同,但从不准确。

由于跟踪号在几个月前的数据中重复,因此我不能仅加入跟踪号本身。例如追踪编号可能会在2019年3月出现,并在2020年1月再次出现,即使它们要运送的包裹非常不同。但是,如果将跟踪与状态表上的orderid并置,则确实会获得唯一值。不过,该订单ID号不在成本表中,因此您也无法将两个表连接到该值上。它必须是跟踪的并且是某种日期范围。

因此,我希望使用跟踪号和从成本表上提供的日期起+ 30天的状态范围(状态表上该跟踪号的最终日期)将两个表连接起来。

这样的事情显然没有“在30天之内”部分。

SELECT C.cost
     , S.trackingnumber
  From UPSCost C
  join UPSStatus S
    ON C.trackingnumber = S.trackingnumber
 WHERE MAX(S.date_time) is in a 30 day window of C.event_date_time

1 个答案:

答案 0 :(得分:0)

您可以展开join并为其添加日期条件。像这样的东西。

SELECT      
    C.cost,     
    S.trackingnumber 
From UPSCost C
    join UPSStatus S
    ON(
        -- Same tracking number
        C.trackingnumber = S.trackingnumber AND
        -- status updated within -+30 days from the date found in cost table
        s.date_time between DATE_SUB(C.event_date_time, interval 30 day) AND DATE_ADD(C.event_date_time, interval 30 day)
    )
Order by S.date_time desc -- latest status first?
相关问题