我已经查看了此问题的其他答案,但尚未找到解决方案。
我有两个表,每个表都有一个跟踪号,一个表有状态历史记录,每个跟踪有几条记录,每种状态的日期时间不同。另一个表是成本表,每个跟踪都有一条记录,其日期时间与状态表的一般时间段相同,但从不准确。
我不能仅加入跟踪号本身,原因是几个月前的数据中跟踪号重复。例如追踪编号可能会在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
您可以展开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?