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:0010/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_parada FROM (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 tk WHERE (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.
Pergunta
Marcelo Vidal
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_parada
FROM (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 tk
WHERE (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.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.