代码之家  ›  专栏  ›  技术社区  ›  hash

如何使用最新报告日期有效跟踪装运的最后位置?

  •  0
  • hash  · 技术社区  · 16 年前

    我需要找到每批货物的最新位置。我们主要通过查看为托运选择的路线,然后找到最新(最长)时间来完成这项工作。 针对此路由的节点输入。例如,如果一个路由有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    
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Aaron Digulla    16 年前

    可以为每个节点分配一个ID并将该ID添加到表中吗 consignments 作为外键?这将允许您在货物通过节点时设置“当前”节点。中“当前节点”字段的“现在”和上次更新之间的时间差 寄售 然后,桌子会给你一个关于货物如何到达路线的主意。

    推荐文章