none
Problema com uma consulta usando o MAX RRS feed

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

    segunda-feira, 26 de novembro de 2018 19:43

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
    segunda-feira, 26 de novembro de 2018 20:51
  • 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
    segunda-feira, 26 de novembro de 2018 22:26

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
    segunda-feira, 26 de novembro de 2018 20:51
  • 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
    segunda-feira, 26 de novembro de 2018 22:26
  • 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]

    quarta-feira, 28 de novembro de 2018 10:56