none
Erro com max e data RRS feed

  • Pergunta

  • Prezados boa tarde, estou tentando trazer a ultima data usando o MAX, so que esta me retornando um valor errado.

    Sql usado

    SELECT MAX(T1.DATAREALIZACAO),T1.PACIENTE, T1.HANDLE
    FROM CLI_EXAME_RESULTADO T1
    WHERE T1.EVENTO IN (505392, 505393, 505438, 505488)
    AND T1.RESULTADO IS NOT NULL
    AND FLOOR(DATEDIFF(day,T1.DATAREALIZACAO,GETDATE())) <= 458
    AND T1.PACIENTE = 93847
    GROUP BY  T1.PACIENTE,T1.HANDLE

    resultado 

    (No column name) PACIENTE HANDLE
    2015-07-04 00:00:00.000 93847 51578115
    2015-07-04 00:00:00.000 93847 51578116
    2015-07-04 00:00:00.000 93847 51578119
    2015-07-04 00:00:00.000 93847 51578122
    2014-07-28 00:00:00.000 93847 51598442
    2014-07-28 00:00:00.000 93847 51598443
    2014-07-28 00:00:00.000 93847 51598444

    esse valor de 2014, não era para trazer, o que eu posso estar fazendo de errado?

    quinta-feira, 29 de outubro de 2015 19:26

Respostas

  • Você acrescentou mais uma coluna na consulta?

    Experimente mais ou menos dessa forma:

    with CTE_RN as
    (
        SELECT 
            T1.DATAREALIZACAO, 
            T1.PACIENTE, 
            T1.EVENTO,
            T1.HANDLE,
            ROW_NUMBER() OVER
                (PARTITION BY T1.PACIENTE, T1.EVENTO
                 ORDER BY T1.DATAREALIZACAO DESC) AS RN
        FROM CLI_EXAME_RESULTADO T1
        WHERE 
            T1.EVENTO IN (505392, 505393, 505438, 505488) AND
            T1.RESULTADO IS NOT NULL AND
            FLOOR(DATEDIFF(day,T1.DATAREALIZACAO,GETDATE())) <= 458 AND 
            T1.PACIENTE = 93847
    )
    
    SELECT * FROM CTE_RN
    WHERE RN = 1

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 30 de outubro de 2015 12:44
  • Douglas, a função ROW_NUMBER foi utilizada para numerar as linhas do resultado, sendo que a numeração começa do 1 para cada combinação existente de Paciente e Evento (clausula Partition By), e as linhas foram ordenadas de forma decrescente por data (clausula Order By), pois dessa forma a linha número 1 vai ser a que tem a última data.

    Mais informações sobre a função: https://msdn.microsoft.com/pt-br/library/ms189798(v=sql.120).aspx

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 15:42
    sexta-feira, 30 de outubro de 2015 14:15

Todas as Respostas

  • Boa tarde,

    Como o agrupamento está sendo feito pelas colunas Paciente e Handle, o resultado vai conter a última data para cada combinação de Paciente e Handle existente na tabela.

    Como você gostaria que ficasse o resultado?


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta Antonio Cesar quinta-feira, 29 de outubro de 2015 20:16
    • Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 10:05
    • Não Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 10:14
    quinta-feira, 29 de outubro de 2015 19:51
  • Gapimex esta saindo assim com os dados de 2014 que não eram para sair

    2015-07-04 00:00:00.000 93847 51578115 505392
    2015-07-04 00:00:00.000 93847 51578116 505393
    2015-07-04 00:00:00.000 93847 51578119 505438
    2015-07-04 00:00:00.000 93847 51578122 505488
    2014-07-28 00:00:00.000 93847 51598442 505488
    2014-07-28 00:00:00.000 93847 51598443 505392
    2014-07-28 00:00:00.000 93847 51598444 505393

    mais preciso que seja assim

    2015-07-04 00:00:00.000 93847 51578115 505392
    2015-07-04 00:00:00.000 93847 51578116 505393
    2015-07-04 00:00:00.000 93847 51578119 505438
    2015-07-04 00:00:00.000 93847 51578122 505488

    os valores maximos mesmo, pois o 505392 é um exemplo de que não esta trazendo o maximo, o que ele tem é que o handle desse é maior, talvez por isso esteja trazendo ele

    sexta-feira, 30 de outubro de 2015 10:18
  • Você acrescentou mais uma coluna na consulta?

    Experimente mais ou menos dessa forma:

    with CTE_RN as
    (
        SELECT 
            T1.DATAREALIZACAO, 
            T1.PACIENTE, 
            T1.EVENTO,
            T1.HANDLE,
            ROW_NUMBER() OVER
                (PARTITION BY T1.PACIENTE, T1.EVENTO
                 ORDER BY T1.DATAREALIZACAO DESC) AS RN
        FROM CLI_EXAME_RESULTADO T1
        WHERE 
            T1.EVENTO IN (505392, 505393, 505438, 505488) AND
            T1.RESULTADO IS NOT NULL AND
            FLOOR(DATEDIFF(day,T1.DATAREALIZACAO,GETDATE())) <= 458 AND 
            T1.PACIENTE = 93847
    )
    
    SELECT * FROM CTE_RN
    WHERE RN = 1

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 30 de outubro de 2015 12:44
  • Você acrescentou mais uma coluna na consulta?

    Experimente mais ou menos dessa forma:

    with CTE_RN as
    (
        SELECT 
            T1.DATAREALIZACAO, 
            T1.PACIENTE, 
            T1.EVENTO,
            T1.HANDLE,
            ROW_NUMBER() OVER
                (PARTITION BY T1.PACIENTE, T1.EVENTO
                 ORDER BY T1.DATAREALIZACAO DESC) AS RN
        FROM CLI_EXAME_RESULTADO T1
        WHERE 
            T1.EVENTO IN (505392, 505393, 505438, 505488) AND
            T1.RESULTADO IS NOT NULL AND
            FLOOR(DATEDIFF(day,T1.DATAREALIZACAO,GETDATE())) <= 458 AND 
            T1.PACIENTE = 93847
    )
    
    SELECT * FROM CTE_RN
    WHERE RN = 1

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    Show de bola Gapimex !!!!!

    Flávio Farias "May the Force be with you" Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 13:34
    • Não Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 13:34
    sexta-feira, 30 de outubro de 2015 12:51
  • Você acrescentou mais uma coluna na consulta?

    Experimente mais ou menos dessa forma:

    with CTE_RN as
    (
        SELECT 
            T1.DATAREALIZACAO, 
            T1.PACIENTE, 
            T1.EVENTO,
            T1.HANDLE,
            ROW_NUMBER() OVER
                (PARTITION BY T1.PACIENTE, T1.EVENTO
                 ORDER BY T1.DATAREALIZACAO DESC) AS RN
        FROM CLI_EXAME_RESULTADO T1
        WHERE 
            T1.EVENTO IN (505392, 505393, 505438, 505488) AND
            T1.RESULTADO IS NOT NULL AND
            FLOOR(DATEDIFF(day,T1.DATAREALIZACAO,GETDATE())) <= 458 AND 
            T1.PACIENTE = 93847
    )
    
    SELECT * FROM CTE_RN
    WHERE RN = 1

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    Gapimex ... funcionou... isso seria oq, so para eu entender
    sexta-feira, 30 de outubro de 2015 13:35
  • Vlw Flávio, obrigado pelo comentário.

    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 30 de outubro de 2015 14:09
  • Douglas, a função ROW_NUMBER foi utilizada para numerar as linhas do resultado, sendo que a numeração começa do 1 para cada combinação existente de Paciente e Evento (clausula Partition By), e as linhas foram ordenadas de forma decrescente por data (clausula Order By), pois dessa forma a linha número 1 vai ser a que tem a última data.

    Mais informações sobre a função: https://msdn.microsoft.com/pt-br/library/ms189798(v=sql.120).aspx

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 15:42
    sexta-feira, 30 de outubro de 2015 14:15