Usuário com melhor resposta
Select com MAX e JOIN

Pergunta
-
Olá à todos!
Tento criar um select em duas tabelas, ambas tem em comum a coluna Tit_Numero, daí usei um JOIN. A cada movimentação no título, Tit_Numero é repetido e criado a ele um número na coluna MovTit_Titulo, que não se repete, daí usei um MAX para trazer a última movimentação, no caso, o MovTit_Titulo de maior número. Segue abaixo uma exemplicação das duas tabelas:
-----------------------------------------------------
[MovTit_a_Receber]
MovTit_Titulo - Tit_Numero - Total_Pago
0001 - 0022 - 900,56
0002 - 0078 - 1.007,5
0003 - 0123 - 556,90
0004 - 0022 - 982,56
------------------------------------------------------------
[Titulos_a_Receber]
Tit_Numero - Tit_Vencimento - Cli_Cod
0022 - 23/09/2013 - 0098
0078 - 11/03/2012 - 0088
0123 - 05/10/2013 - 0055
0022 - 23/09/2013 - 0098------------------------------------------------------------
Todavia, ao executar o select, ele repete alguns valores, mas não todos.
Segue exemplo abaixo, que no caso, deveria trazer apenas a linha de valor 982,56, pois tem MovTit_Titulo maior, mas traz outro valor também:
MovTit_Titulo - Tit_Numero - Tit_Vencimento - Cli_Cod - Total_Pago
0001 - 0022 - 23/09/2013 - 0098 - 900,56
0004 - 0022 - 23/09/2013 - 0098 - 982,56
O código é o seguinte:
USE dbdsctreino SELECT MAX(MovTit_Numero), t.Tit_Numero, Cli_Cod, Tit_DataVencimento, ElementoPreco_Cod, Par_SerieNumero, Tit_ValorPrincipal, MovTit_TotalPago, Tit_Situacao,Tit_DataPagamento FROM Titulos_a_Receber t JOIN Movimento_Titulos_AReceber p ON t.Tit_Numero=p.Tit_Numero WHERE Tit_DataEmissao > '2012-12-31 00:00:00.000' and MovTit_Cancelado = 'N' and Cli_Cod ='0444' GROUP BY Cli_Cod, t.Tit_Numero, Tit_DataVencimento, ElementoPreco_Cod, Par_SerieNumero, Tit_ValorPrincipal, MovTit_TotalPago, Tit_Situacao,Tit_DataPagamento ORDER BY Cli_Cod
- Editado Rômulo Mendes Júnior sábado, 5 de outubro de 2013 21:23
Respostas
-
Boa noite,
Experimente dessa forma:
with CTE_RN as ( SELECT MovTit_Numero, t.Tit_Numero, Cli_Cod, Tit_DataVencimento, ElementoPreco_Cod, Par_SerieNumero, Tit_ValorPrincipal, MovTit_TotalPago, Tit_Situacao, Tit_DataPagamento, ROW_NUMBER() OVER(PARTITION BY t.Tit_Numero ORDER BY MovTit_Numero DESC) as RN FROM Titulos_a_Receber t JOIN Movimento_Titulos_AReceber p ON t.Tit_Numero = p.Tit_Numero WHERE Tit_DataEmissao > '2012-12-31 00:00:00.000' and MovTit_Cancelado = 'N' and Cli_Cod ='0444' ) select * from CTE_RN where RN = 1
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Rômulo Mendes Júnior domingo, 6 de outubro de 2013 01:31
-
Deleted
- Marcado como Resposta Rômulo Mendes Júnior domingo, 6 de outubro de 2013 01:32
Todas as Respostas
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias domingo, 6 de outubro de 2013 00:19
-
Boa noite,
Experimente dessa forma:
with CTE_RN as ( SELECT MovTit_Numero, t.Tit_Numero, Cli_Cod, Tit_DataVencimento, ElementoPreco_Cod, Par_SerieNumero, Tit_ValorPrincipal, MovTit_TotalPago, Tit_Situacao, Tit_DataPagamento, ROW_NUMBER() OVER(PARTITION BY t.Tit_Numero ORDER BY MovTit_Numero DESC) as RN FROM Titulos_a_Receber t JOIN Movimento_Titulos_AReceber p ON t.Tit_Numero = p.Tit_Numero WHERE Tit_DataEmissao > '2012-12-31 00:00:00.000' and MovTit_Cancelado = 'N' and Cli_Cod ='0444' ) select * from CTE_RN where RN = 1
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Rômulo Mendes Júnior domingo, 6 de outubro de 2013 01:31
-
Deleted
- Marcado como Resposta Rômulo Mendes Júnior domingo, 6 de outubro de 2013 01:32
-
José.Diz, rodou perfeitamente, e deu para entender perfeitamente também.
Obrigado!
- Editado Rômulo Mendes Júnior domingo, 6 de outubro de 2013 01:35
-