Como posso rastrear o último local de uma remessa eficazmente usando a data mais recente dos relatórios?

StackOverflow https://stackoverflow.com/questions/2583750

Pergunta

Preciso encontrar o local mais recente de cada item de carga em uma remessa. Fazemos isso principalmente olhando para a rota selecionada para uma consignação e, em seguida, encontramos o mais recente tempo (máximo) inserido contra os nós dessa rota. Por exemplo, se uma rota tiver 5 nós e inserimos horários contra os três primeiros nós, o tempo mais recente (tempo máximo) nos informará sua localização entre os três nós.
Estou realmente preso a essa consulta em relação a questões de desempenho. Mesmo em algumas centenas de fileiras, leva mais de 2 minutos. Por favor, sugira como posso melhorar esta consulta ou qualquer abordagem alternativa que devo adquirir?

Nota: ATA = Hora real da chegada e ATD = Hora real da partida

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    
Foi útil?

Solução

Você pode atribuir a cada nó um ID e adicionar esse ID à tabela consignments Como uma chave estrangeira? Isso permitiria que você definisse o nó "atual" quando a carga passar por um nó. A diferença horária entre agora e a última atualização do campo "nó atual" no consignments A Table daria uma idéia de como a carga chegou à rota.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top