none
Filtrando numa query caso haja registros iguais, trazer o que tem a sequencia maior RRS feed

  • Pergunta

  • Boa tarde a todos,

    Estou precisando criar uma query que ela traga todos os registros mencionados porém caso seja igual o num_titulo, prefixo, valor,parcela,cod_cliente e loja ele traga o que tiver o registro com maior sequência, vou dar um exemplo melhor abaixo:

    Até o momento tenho esse código:

    SELECT distinct E5_NUMERO NUM_TITULO,
    E5_PREFIXO PREFIXO,
    E5_VALOR VALOR,
    E5_DTDIGIT DT_DIG,
    E5_PARCELA PARCELA,
    E5_CLIFOR COD_CLI,
    E5_LOJA LOJA,
    E5_SEQ SEQUENCIA
    FROM SE5010
    where 
    SE5010.D_E_L_E_T_ <> '*'
    AND E5_RECPAG='R'
    AND E5_NUMERO='001156   '

    tenho esse resultado:

    NUM_TITULO PREFIXO VALOR DT_DIG PARCELA COD_CLI LOJA SEQUENCIA
    001156    CH  500 20100412   1 58908331 115    01
    001156    CH  4845,29 20130207   2 13056250 0001    01
    001156    CH  4845,29 20130507   2 13056250 0001   02
    001156    CHD 160,09 20130218   2 13056250 0001   02
    001156    CHD 234,8 20130218   2 13056250 0001   01
    001156    CHD 4920 20130218   2 13056250 0001   01
    001156    CHT 70 20090515   1 26920835 0001   01
    001156    CHT 153,7 20130510   3 26734871 0001   01
    001156    CHT 608 20110804   2 02216401 0001   01


    Como se pode ver os registro 2 e 3 são iguais, ambos tem NUM_TITULO,PREFIXO,VALOR,PARCELA,COD_CLI,LOJA com os mesmos valores, tenho apenas como diferente o DT_DIG e Sequencia. Gostaria que minha consulta verificasse se for iguais os campos NUM_TITULO, PREFIXO, VALOR, PARCELA, COD_CLI, LOJA ele apresentasse apenas 1 registro e que senha o número maior na sequencia. Alguém sabe como fazer isso?

    Desde já agradeço.

    segunda-feira, 9 de dezembro de 2013 19:17

Respostas

  • TESTE ESSA SQL

    SELECT  
    		SE5010.SEQUENCIA, 
    		SE5010.NUM_TITULO, 
    		SE5010.PREFIXO, 
    		SE5010.VALOR, 
    		SE5010.DT_DIG, 
    		SE5010.PARCELA, 
    		SE5010.COD_CLI,
    		SE5010.LOJA,
    		SE5010.SEQUENCIA 
    		FROM (
    			SELECT
    					COUNT(SEQUENCIA) TOTALSEQUENCIA, 
    					MAX(SEQUENCIA) MAXIMASEQUENCIA,
    					NUM_TITULO, 
    					PREFIXO, 
    					VALOR, 
    					PARCELA, 
    					COD_CLI, 
    					LOJA
    			FROM [App].[dbo].[SE5010] 
    			GROUP BY 
    					NUM_TITULO, 
    					PREFIXO, 
    					VALOR, 
    					PARCELA, 
    					COD_CLI, 
    					LOJA
    		) SE5010_B JOIN SE5010 ON SE5010.NUM_TITULO=SE5010_B.NUM_TITULO AND SE5010.PREFIXO=SE5010_B.PREFIXO AND
    		SE5010.VALOR=SE5010_B.VALOR AND SE5010.PARCELA=SE5010_B.PARCELA AND	SE5010.COD_CLI=SE5010_B.COD_CLI AND
    		SE5010.LOJA=SE5010_B.LOJA AND SE5010_B.MAXIMASEQUENCIA = SE5010.SEQUENCIA	
    		ORDER BY SE5010.NUM_TITULO, 
    				 SE5010.PREFIXO, 
    				 SE5010.VALOR, 
    				 SE5010.PARCELA, 
    				 SE5010.COD_CLI, 
    				 SE5010.LOJA, 
    				 SE5010.SEQUENCIA, 
    				 SE5010.DT_DIG

    E se ta de parabéns colocou toda a dúvida poderia ser um post de exemplo


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta GilbertoFSilva terça-feira, 10 de dezembro de 2013 11:14
    segunda-feira, 9 de dezembro de 2013 20:55

Todas as Respostas

  • Boa tarde,

    Experimente dessa forma:

    with CTE_RN as
    (
        SELECT 
            E5_NUMERO NUM_TITULO,
            E5_PREFIXO PREFIXO,
            E5_VALOR VALOR,
            E5_DTDIGIT DT_DIG,
            E5_PARCELA PARCELA,
            E5_CLIFOR COD_CLI,
            E5_LOJA LOJA,
            E5_SEQ SEQUENCIA,
            ROW_NUMBER() 
                OVER(
                    PARTITION BY
                        E5_NUMERO,
                        E5_PREFIXO,
                        E5_VALOR,
                        E5_PARCELA,
                        E5_LOJA
                    ORDER BY
                        E5_SEQ SEQUENCIA DESC) AS RN
        FROM SE5010
        where 
            SE5010.D_E_L_E_T_ <> '*'
            AND E5_RECPAG='R'
            AND E5_NUMERO='001156   '
    )
    
    SELELCT * FROM CTE_RN
    WHERE RN = 1

    Espero que ajude.


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

    segunda-feira, 9 de dezembro de 2013 20:54
  • TESTE ESSA SQL

    SELECT  
    		SE5010.SEQUENCIA, 
    		SE5010.NUM_TITULO, 
    		SE5010.PREFIXO, 
    		SE5010.VALOR, 
    		SE5010.DT_DIG, 
    		SE5010.PARCELA, 
    		SE5010.COD_CLI,
    		SE5010.LOJA,
    		SE5010.SEQUENCIA 
    		FROM (
    			SELECT
    					COUNT(SEQUENCIA) TOTALSEQUENCIA, 
    					MAX(SEQUENCIA) MAXIMASEQUENCIA,
    					NUM_TITULO, 
    					PREFIXO, 
    					VALOR, 
    					PARCELA, 
    					COD_CLI, 
    					LOJA
    			FROM [App].[dbo].[SE5010] 
    			GROUP BY 
    					NUM_TITULO, 
    					PREFIXO, 
    					VALOR, 
    					PARCELA, 
    					COD_CLI, 
    					LOJA
    		) SE5010_B JOIN SE5010 ON SE5010.NUM_TITULO=SE5010_B.NUM_TITULO AND SE5010.PREFIXO=SE5010_B.PREFIXO AND
    		SE5010.VALOR=SE5010_B.VALOR AND SE5010.PARCELA=SE5010_B.PARCELA AND	SE5010.COD_CLI=SE5010_B.COD_CLI AND
    		SE5010.LOJA=SE5010_B.LOJA AND SE5010_B.MAXIMASEQUENCIA = SE5010.SEQUENCIA	
    		ORDER BY SE5010.NUM_TITULO, 
    				 SE5010.PREFIXO, 
    				 SE5010.VALOR, 
    				 SE5010.PARCELA, 
    				 SE5010.COD_CLI, 
    				 SE5010.LOJA, 
    				 SE5010.SEQUENCIA, 
    				 SE5010.DT_DIG

    E se ta de parabéns colocou toda a dúvida poderia ser um post de exemplo


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta GilbertoFSilva terça-feira, 10 de dezembro de 2013 11:14
    segunda-feira, 9 de dezembro de 2013 20:55
  • Obrigado gapimex pela dica, mas após rodar seu código apareceu um erro de sintaxe:

    Incorrect syntax near 'SEQUENCIA'.

    terça-feira, 10 de dezembro de 2013 10:37
  • cê q tá de parabéns Fúlvio Cezar, sua query resolveu meu problema, muito obrigado.
    terça-feira, 10 de dezembro de 2013 11:15