我需要在货物中找到每个货物的最新位置。我们主要通过查看为货物选择的路线然后查找最新(最长)时间来完成此操作
针对此路线的节点输入。例如,如果一条路线有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
答案 0 :(得分:1)
您可以为每个节点分配一个ID,并将该ID作为外键添加到表consignments
吗?这将允许您在货物通过节点时设置“当前”节点。现在和consignments
表中“当前节点”字段的最后一次更新之间的时差可以让您了解货物在路线上的运行情况。