Usuário com melhor resposta
Erro com max e data

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.HANDLEresultado
(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 51598444esse valor de 2014, não era para trazer, o que eu posso estar fazendo de errado?
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
- Sugerido como Resposta Flávio Augusto Lacerda de FariasMVP sexta-feira, 30 de outubro de 2015 12:51
- Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 13:34
-
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
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 15:42
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
-
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 505393mais 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 505488os 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
-
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
- Sugerido como Resposta Flávio Augusto Lacerda de FariasMVP sexta-feira, 30 de outubro de 2015 12:51
- Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 13:34
-
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
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
-
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
-
Vlw Flávio, obrigado pelo comentário.
Assinatura: http://www.imoveisemexposicao.com.br
-
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
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta douglasamfm13 sexta-feira, 30 de outubro de 2015 15:42