貨物内の各貨物の最新の場所を見つける必要があります。これは主に、委託用に選択されたルートを調べてから、このルートのノードに対して入力された最新の (最大) 時間を見つけることによって行われます。たとえば、ルートに 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