Usuário com melhor resposta
Filtrando numa query caso haja registros iguais, trazer o que tem a sequencia maior

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.
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
- Marcado como Resposta GilbertoFSilva terça-feira, 10 de dezembro de 2013 11:14
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
-
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
- Marcado como Resposta GilbertoFSilva terça-feira, 10 de dezembro de 2013 11:14
-
-