我需要找到每批货物的最新位置。我们主要通过查看为托运选择的路线,然后找到最新(最长)时间来完成这项工作。
针对此路由的节点输入。例如,如果一个路由有5个节点,并且我们已经输入了前3个节点的时间,那么最新的时间(最长时间)将告诉我们它在3个节点中的位置。
关于性能问题,我真的很难回答这个问题。即使在几百行,也需要2分钟以上。请建议我如何改进此查询或应获得的任何其他方法?
注:ata=实际到达时间,atd=实际出发时间
SELECT DISTINCT
c.id as cid
, c.ref as cons_ref
, c.Name
, c.CustRef
FROM consignments c
INNER JOIN routes r ON c.Route = r.ID
INNER JOIN routes_nodes rn ON rn.Route = r.ID
INNER JOIN cargo_timing ct ON c.ID=ct.ConsignmentID
INNER JOIN ( SELECT t.ConsignmentID, Max(t.firstata) as MaxDate
FROM cargo_timing t
GROUP BY t.ConsignmentID
) as TMax
ON ( TMax.MaxDate=ct.firstata
AND TMax.ConsignmentID=c.ID
)
INNER JOIN nodes an ON ct.routenodeid = an.ID
INNER JOIN contract cor ON cor.ID = c.Contract
WHERE c.Type = 'Road'
AND ( c.ATD = 0 AND c.ATA != 0 )
AND (cor.contract_reference in ('Generic','BP001','020-543-912'))
ORDER BY c.ref ASC