【问题标题】:Join on Date Ranges加入日期范围
【发布时间】:2020-05-23 19:29:59
【问题描述】:

我查看了这个问题的其他答案,但没有找到解决方案。

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

由于前几个月的数据中的跟踪号重复,我不能只加入跟踪号本身。前任。跟踪号可能会出现在 2019 年 3 月和 2020 年 1 月,即使它们是非常不同的包裹。但是,如果您将跟踪与状态表上的 orderid 连接起来,您将获得一个唯一值。该 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】:

您可以扩展您的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?

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 2011-01-19
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多