Usuário com melhor resposta
Problema com uma consulta usando o MAX

Pergunta
-
Amigos, boa tarde!!
Estou tendo o seguinte problema com a seguinte query:
SELECT MAX(evt.cod) CODIGO,
EVT.DES_STT ...Quando eu busco só o campo CODIGO, ela me retorna 1 resultado (o Maior) como deveria, porém se eu pedir pra trazer mais algum campo, ela me retorna mais de um registro. como faço para ela retornar apenas o maior?
Respostas
-
Olá!
Vou contribuir com duas dicas:
select evt.cod as CODIGO, EVT.DES_STT from EVT cross apply ( select MAX(EVTMAX.cod) as CODIGO from EVT as EVTMAX ) as EVTMAX where EVT.cod = EVTMAX.CODIGO -- ou select * from EVT where EVT.cod = (select max(EVTMAX.cod) from EVT as EVTMAX)
Talvez você tenha que ajustar alguma coisa nos alias das tabelas. Bom trabalho!
- Editado Rodrigo CdS segunda-feira, 26 de novembro de 2018 20:52
- Marcado como Resposta Euneo terça-feira, 27 de novembro de 2018 09:55
-
Boa noite,
Euneo, se você quer retornar outras colunas da linha que possui o maior código, acho que uma alternativa seria o uso de funções de classificação. Ex:
with CTE_RN as ( select *, row_number() over(order by cod desc) as RN from Tabela ) select * from CTE_RN where RN = 1
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Euneo terça-feira, 27 de novembro de 2018 09:54
Todas as Respostas
-
Olá!
Vou contribuir com duas dicas:
select evt.cod as CODIGO, EVT.DES_STT from EVT cross apply ( select MAX(EVTMAX.cod) as CODIGO from EVT as EVTMAX ) as EVTMAX where EVT.cod = EVTMAX.CODIGO -- ou select * from EVT where EVT.cod = (select max(EVTMAX.cod) from EVT as EVTMAX)
Talvez você tenha que ajustar alguma coisa nos alias das tabelas. Bom trabalho!
- Editado Rodrigo CdS segunda-feira, 26 de novembro de 2018 20:52
- Marcado como Resposta Euneo terça-feira, 27 de novembro de 2018 09:55
-
Boa noite,
Euneo, se você quer retornar outras colunas da linha que possui o maior código, acho que uma alternativa seria o uso de funções de classificação. Ex:
with CTE_RN as ( select *, row_number() over(order by cod desc) as RN from Tabela ) select * from CTE_RN where RN = 1
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Euneo terça-feira, 27 de novembro de 2018 09:54
-
Olá!
Vou contribuir com duas dicas:
select evt.cod as CODIGO, EVT.DES_STT from EVT cross apply ( select MAX(EVTMAX.cod) as CODIGO from EVT as EVTMAX ) as EVTMAX where EVT.cod = EVTMAX.CODIGO -- ou select * from EVT where EVT.cod = (select max(EVTMAX.cod) from EVT as EVTMAX)
Talvez você tenha que ajustar alguma coisa nos alias das tabelas. Bom trabalho!
Rodrigo,
Particularmente prefiro a segunda sugestão que esta utilizando SubQuery ao invés do operador Cross Apply, que acaba sendo mais custoso de processamento para este exemplo.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]