none
Select datediff com um data ? RRS feed

  • 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)

    sábado, 28 de julho de 2012 21:49

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

    • Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45
    • Não Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45
    • Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45
    segunda-feira, 30 de julho de 2012 12:14
  • 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

    Valeu 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
    segunda-feira, 30 de julho de 2012 23:43

Todas as Respostas

  • Rafael,

    Ainda não consegui entender como vc quer obter a data. Detalhe melhor com exemplos, por favor.


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com

    segunda-feira, 30 de julho de 2012 12:05
  • 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

    • Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45
    • Não Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45
    • Marcado como Resposta RJ_Silva segunda-feira, 30 de julho de 2012 23:45
    segunda-feira, 30 de julho de 2012 12:14
  • 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]

    segunda-feira, 30 de julho de 2012 13:54
  • 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

    Valeu 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
    segunda-feira, 30 de julho de 2012 23:43