Ir para conteúdo
Fórum Script Brasil

Marcelo Vidal

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que Marcelo Vidal postou

  1. Oi Pessoal, Minha dúvida é a seguinte, tenho uma tabelas com as seguintes informações: id_dados nr_maquina dt_dados_inicio dt_dados_fim 998 1 10/03/2018 15:00:05 10/03/2018 15:00:35 999 2 10/03/2018 15:00:15 10/03/2018 15:00:40 1000 1 10/03/2018 15:00:35 10/03/2018 15:01:05 1001 2 10/03/2018 15:00:40 10/03/2018 15:01:00 1000 1 10/03/2018 15:01:05 10/03/2018 15:01:35 1001 1 10/03/2018 15:10:35 10/03/2018 15:11:05 1001 2 10/03/2018 15:10:40 10/03/2018 15:11:10 Eu preciso de uma query onde possa receber o seguinte resultado: nr_maquina dt_inicio_parada dt_fim_parada 1 10/03/2018 15:00:35 10/03/2018 15:10:35 2 10/03/2018 15:01:00 10/03/2018 15:10:40 Ou seja, preciso que me traga o número da máquina com o intervalo não sequencial de dt_fim e dt_inicio do próximo registro. Tenho uma query bem longa mas que além de muito lenta não trás corretamente as informações, e por esse motivo preciso de alguma coisa melhor. A query que tenho é esta abaixo: SELECT v1.nr_maquina as nr_maquina , v1.dt_dados_fim as dt_inicio_parada , tk.dt_dados_inicio as dt_fim_paradaFROM (SELECT id_dados, dt_dados_inicio, dt_dados_fim, nr_maquina FROM dbo.TB_DADOS AS t1 WHERE EXISTS (SELECT 1 AS Expr1 FROM dbo.TB_DADOS AS t2 WHERE (id_dados = (SELECT MIN(id_dados) AS Expr1 FROM dbo.TB_DADOS AS t3 WHERE (id_dados > t1.id_dados) AND (nr_maquina = t1.nr_maquina))) AND (dt_dados_inicio > t1.dt_dados_fim) AND (nr_maquina = t1.nr_maquina))) AS v1 CROSS JOIN dbo.TB_DADOS AS tkWHERE (tk.id_dados = (SELECT MIN(id_dados) AS Expr1 FROM dbo.TB_DADOS AS tk3 WHERE (id_dados > v1.id_dados) AND (nr_maquina = v1.nr_maquina))) Se alguém tiver passado por isso e tiver alguma idéia de uma forma melhor de resolver esse problema, agradeço. Abraço.
×
×
  • Criar Novo...