PROCEDURE FIREBIRD

Firebird

05/02/2009

BOA NOITE A TODOS!

ESTOU COM UM PROBLEMINHA AQUI E NAO ESTOU CONSEGUINDO RESOLVER ESPERO QUE VOCES ME AJUDEM.

BANCO DE DADOS: FIREBIRD 1.5

TENHO UMA TABELA CHAMADA TBL_LANC_CLIENTES QUE CONTEM OS DADOS DO LANCAMENTO DE CADA CLIENTE.

TBL_LANC_CLIENTE
CODIGO
COD_CLIENTE
DEBITO
ETC...

NECESSITO SELECIONAR O ULTIMO LANCAMENTO DE CADA CLIENTE, QUE O DEBITO SEJA MAIOR QUE ZERO. EU IDENTIFICO O ULTIMO LANCAMENTO PELO CODIGO DO LANCAMENTO.

OBRIGADO!


Malaquias

Malaquias

Curtidas 0

Respostas

Facc

Facc

05/02/2009

Select MAX(codlancamento) from Clientes where Debito > 0





Evite escrever em caixa alta, dá impressao de vc estar gritando


GOSTEI 0
Malaquias

Malaquias

05/02/2009

Bom dia Facc!

O problema se eu fizer assim ele vai selecionar somentos os lancamentos com debito. A minha intencao é selecionar somente o ultimo lancamento de cada cliente, mas so selecionar se contiver debito senao nao seleciona.

Obrigado!


GOSTEI 0
Rodolpho123

Rodolpho123

05/02/2009

Malaquias,

Tente assim, mas acho que isso só funciona na versão 2.0+ do Fb, devido ao subselect:
select c1.cod_cliente
from clientes c1 
where codlancamento = (Select  MAX(c2.codlancamento) 
                                    from Clientes c2
                                    where c2.Debito > 0
                                       and c2.cod_cliente = c1.cod_cliente)




GOSTEI 0
Junior Miranda

Junior Miranda

05/02/2009

Select MAX(codlancamento) from Clientes where Debito > 0
Group By Cod_Cliente


Se entendi...


GOSTEI 0
Malaquias

Malaquias

05/02/2009

Acho que não expliquei direito desculpa.

Tenho as seguintes tabelas:

TBL_LANCAMENTOS
CODIGO
COD_CLIENTE
COD_LINHA
DEBITO

TBL_CLIENTES
CODIGO
NOME

TBL_LINHAS
CODIGO
NOME

Necessito selecionar da tabela de lancamentos o ultimo lancamento de cada cliente (mas somente o que tiver o campo debito maior que zero)
e exibir COD_CLIENTE, CLIENTE, LINHA, DEBITO.

Obrigado! e desculpa nao ter me expressado direito.


GOSTEI 0
Junior Miranda

Junior Miranda

05/02/2009

Na verdade me parece ser uma evolução no
Select MAX(codlancamento) from Clientes where Debito > 0 
Group By Cod_Cliente


Veja se é isto
Select MAX(Q.codlancamento), Q1.Nome, Q2.Nome, Q.Debito from Clientes Q 
Left Join TBL_CLIENTES Q1 On Q.COD_CLIENTE = Q1.CODIGO 
Left Join TBL_LINHA Q2 On Q.COD_LINHA = Q2.CODIGO
where 
    Q.Debito > 0 
Group By 2,3,4 


Escrevi sem testar. Qualquer coisa dá um post.
[/code]


GOSTEI 0
Malaquias

Malaquias

05/02/2009

Obrigado pessoal!

Atraves da ideia de voces consegui a solucao...

SQL = ´SELECT LANC.COD_CLIENTE, CLI.CLIENTE, LINHA.LINHA, LANC.DEBITO´
SQL = SQL & ´ FROM TBL_CAD_CLIENTES CLI´
SQL = SQL & ´ LEFT JOIN TBL_LANC_CLIENTE LANC on (LANC.COD_CLIENTE = CLI.CODIGO)´
SQL = SQL & ´ LEFT JOIN TBL_CAD_LINHAS LINHA on (LINHA.CODIGO = LANC.COD_LINHA)´
SQL = SQL & ´ WHERE LANC.CODIGO = (SELECT MAX(LANC2.CODIGO)´
SQL = SQL & ´ FROM TBL_LANC_CLIENTE LANC2 WHERE LANC2.COD_CLIENTE = CLI.CODIGO) AND LANC.DEBITO > 0´

Obrigado!

Abraço!


GOSTEI 0
POSTAR