0

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

1 に答える 1

1

各ノードに ID を割り当て、その ID をconsignments外部キーとしてテーブルに追加できますか? これにより、貨物がノードを通過するときに「現在の」ノードを設定できます。テーブルの「現在のノード」フィールドの現在と最後の更新との時間差はconsignments、貨物がどのようにルートに到達したかを示します。

于 2010-04-06T09:31:42.500 に答える