Usuário com melhor resposta
Select datediff com um data ?

Pergunta
-
Boa noite !
Como faco para obter a diferencas entre um DATA e outra sendo que tenho somente a data de inicio , a data final sera a data do proximo evento .
Estava tentando com os Codigo
<
DECLARE @DATA_VALIDA DATETIME
SET @DATA_VALIDA = (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE MAN_ID = 62 ORDER BY ACO_ID DESC)
SELECT
A.MAN_ID,
A.ACO_ID,
EVENTO.*,
A.ACO_DT_INICIO,
CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN @DATA_VALIDA ELSE
B.ACO_DT_INICIO END AS DT_FIM,
CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN CONVERT (VARCHAR (15),'00:00') ELSE
(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO,B.ACO_DT_INICIO) / 60))
+ ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO,B.ACO_DT_INICIO)
% 60) + 100), 2) )END AS TEMPO
FROM MANUTENCAO_ACOMPANHAMENTO A
INNER JOIN MANUTENCAO_ACOMPANHAMENTO B ON(B.ACO_ID = A.ACO_ID +1 )
INNER JOIN EVENTO_ACOMPANHAMENTO_MANUTENCAO AS EVENTO ON A.EVE_ID = EVENTO.EVE_ID
WHERE A.MAN_ID = 62/>
Mas o problemas é fazendo o inner join assim (INNER JOIN MANUTENCAO_ACOMPANHAMENTO B ON(B.ACO_ID = A.ACO_ID +1 )) ja tentei usar tbm
MANUTENCAO_ACOMPANHAMENTO B ON(B.ACO_ID = A.ACO_ID +1 ) and (A.MAN_ID = B.MAN_ID) tbm nao funcionou
eu pego o proximo ACO_ID independente de qualquer coisa e o que preciso eh pegar o proxima ACO_ID que tenha o MAN_ID (que é o id de uma outra tabela)
Respostas
-
Olá Rafael,
Tente desta forma
DECLARE @DATA_VALIDA DATETIME SET @DATA_VALIDA = (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE MAN_ID = 62 ORDER BY ACO_ID DESC) SELECT A.MAN_ID, A.ACO_ID, EVENTO.*, A.ACO_DT_INICIO, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN @DATA_VALIDA ELSE (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62) END AS DT_FIM, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN CONVERT (VARCHAR (15),'00:00') ELSE (CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) / 60)) + ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) % 60) + 100), 2) )END AS TEMPO FROM MANUTENCAO_ACOMPANHAMENTO A INNER JOIN EVENTO_ACOMPANHAMENTO_MANUTENCAO AS EVENTO ON A.EVE_ID = EVENTO.EVE_ID WHERE A.MAN_ID = 62
Att.
Lukas Baldan -
Olá Rafael,
Tente desta forma
DECLARE @DATA_VALIDA DATETIME SET @DATA_VALIDA = (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE MAN_ID = 62 ORDER BY ACO_ID DESC) SELECT A.MAN_ID, A.ACO_ID, EVENTO.*, A.ACO_DT_INICIO, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN @DATA_VALIDA ELSE (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62) END AS DT_FIM, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN CONVERT (VARCHAR (15),'00:00') ELSE (CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) / 60)) + ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) % 60) + 100), 2) )END AS TEMPO FROM MANUTENCAO_ACOMPANHAMENTO A INNER JOIN EVENTO_ACOMPANHAMENTO_MANUTENCAO AS EVENTO ON A.EVE_ID = EVENTO.EVE_ID WHERE A.MAN_ID = 62
Att.
Lukas BaldanValeu Lukas ,
Finalmente depois de quase 2 meses resolvi meu problemas srsr
Obrigado pela ajuda!
- Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45
Todas as Respostas
-
-
Olá Rafael,
Tente desta forma
DECLARE @DATA_VALIDA DATETIME SET @DATA_VALIDA = (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE MAN_ID = 62 ORDER BY ACO_ID DESC) SELECT A.MAN_ID, A.ACO_ID, EVENTO.*, A.ACO_DT_INICIO, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN @DATA_VALIDA ELSE (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62) END AS DT_FIM, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN CONVERT (VARCHAR (15),'00:00') ELSE (CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) / 60)) + ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) % 60) + 100), 2) )END AS TEMPO FROM MANUTENCAO_ACOMPANHAMENTO A INNER JOIN EVENTO_ACOMPANHAMENTO_MANUTENCAO AS EVENTO ON A.EVE_ID = EVENTO.EVE_ID WHERE A.MAN_ID = 62
Att.
Lukas Baldan -
Rafael,
Esta data do próximo evento, não seria então a data de execução do Evento? Neste caso a própria função GetDate() poderia ajudar.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Olá Rafael,
Tente desta forma
DECLARE @DATA_VALIDA DATETIME SET @DATA_VALIDA = (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE MAN_ID = 62 ORDER BY ACO_ID DESC) SELECT A.MAN_ID, A.ACO_ID, EVENTO.*, A.ACO_DT_INICIO, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN @DATA_VALIDA ELSE (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62) END AS DT_FIM, CASE WHEN @DATA_VALIDA = A.ACO_DT_INICIO THEN CONVERT (VARCHAR (15),'00:00') ELSE (CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) / 60)) + ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,A.ACO_DT_INICIO, (SELECT TOP 1 ACO_DT_INICIO FROM MANUTENCAO_ACOMPANHAMENTO WHERE ACO_ID > A.ACO_ID AND MAN_ID = 62)) % 60) + 100), 2) )END AS TEMPO FROM MANUTENCAO_ACOMPANHAMENTO A INNER JOIN EVENTO_ACOMPANHAMENTO_MANUTENCAO AS EVENTO ON A.EVE_ID = EVENTO.EVE_ID WHERE A.MAN_ID = 62
Att.
Lukas BaldanValeu Lukas ,
Finalmente depois de quase 2 meses resolvi meu problemas srsr
Obrigado pela ajuda!
- Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45