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.