加入日期范围

问题描述 投票:0回答:1

我已经查看了此问题的其他答案,但尚未找到解决方案。

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

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

因此,我希望使用跟踪号和从成本表上提供的日期起+ 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
mysql date join range date-range
1个回答
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?
© www.soinside.com 2019 - 2024. All rights reserved.