CONSULTA DE CONTRATOS QUITADO NO PERÍODO

14/02/2015

quero fazer uma busca com a tabela de parcelas para mostrar quais os contratos foram terminado de ser quitados por completos em um período.
Lembrando que quero o resultado da ultima parcela se a situação da mesma = 'L' de Liquidada e a data de pgto seja a mesma data
do filtro que escolhi.

dados da tabela caso queiram criar a mesma:

CREATE TABLE TB_PARCELA (
PAR_CODIGO INTEGER NOT NULL,
VEN_CODIGO INTEGER,
CLI_CODIGO INTEGER,
CLI_NOME VARCHAR(30),
PAR_QTDEPARC INTEGER,
PAR_VALORPARC NUMERIC(15,2),
PAR_NUMPARCELA INTEGER,
PAR_VALORNOTA NUMERIC(15,2),
PAR_HAVER NUMERIC(15,2),
PAR_SITUACAO CHAR(1) DEFAULT 'A',
PAR_DTPGTO DATE,
PAR_DTVENC DATE
);


Alimentação da tabela caso queiram alimentar a mesma:

INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (1, 1, 10, 'JOAO FULANO', 5, 50, 1, 250, 0, 'L', '2014-06-01', '2014-09-01');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (2, 1, 10, 'JOAO FULANO', 5, 50, 2, 250, 0, 'L', '2014-07-01', '2014-10-01');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (3, 1, 10, 'JOAO FULANO', 5, 50, 3, 250, 0, 'L', '2014-07-01', '2014-11-01');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (4, 1, 10, 'JOAO FULANO', 5, 50, 4, 250, 0, 'L', '2014-09-01', '2014-12-01');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (6, 5, 5, 'SENHOR BEUTRANO', 3, 100, 1, 300, 0, 'L', '2014-12-01', '2014-12-10');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (7, 5, 5, 'SENHOR BEUTRANO', 3, 100, 2, 300, 0, 'L', '2014-12-01', '2015-02-05');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (8, 10, 25, 'SICRANO DA SILVA', 3, 25, 1, 25, 0, 'L', '2014-12-01', '2015-01-02');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (5, 1, 10, 'JOAO FULANO', 5, 50, 5, 250, 0, 'L', '2014-12-01', '2015-01-01');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (11, 5, 5, 'SENHOR BEUTRANO', 3, 100, 3, 300, 0, 'A', NULL, NULL);
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (9, 10, 25, 'SICRANO DA SILVA', 3, 25, 2, 25, 0, 'L', '2014-12-01', '2015-02-05');
INSERT INTO TB_PARCELA (PAR_CODIGO, VEN_CODIGO, CLI_CODIGO, CLI_NOME, PAR_QTDEPARC, PAR_VALORPARC, PAR_NUMPARCELA, PAR_VALORNOTA, PAR_HAVER, PAR_SITUACAO, PAR_DTPGTO, PAR_DTVENC) VALUES (10, 10, 25, 'SICRANO DA SILVA', 3, 25, 3, 25, 0, 'A', NULL, '2015-03-06');

a tabela criada e alimentada ficará mais ou menos desse jeito.

[img:descricao=tabela criada e preenchida]http://arquivo.devmedia.com.br/forum/imagem/337710-20150214-092359.jpg[/img]


faço meu código mais ele traz apenas algumas parcelas ex:


[img:descricao=SQL usado na minha pesquisa e esta saindo diferente do resultado que quero ]http://arquivo.devmedia.com.br/forum/imagem/337710-20150214-091915.jpg[/img]

[img:descricao=Resultado que mostra]http://arquivo.devmedia.com.br/forum/imagem/337710-20150214-092019.jpg[/img]

Respostas

14/02/2015

Marisiana

Olá Marlos!
Não entendi porque utilizastes o NOT EXISTS no teu SELECT....
Pelo que descrevestes, um SELECT como esse resolveria:
SELECT P.VEN_CODIGO,
      P.CLI_CODIGO,
      P.CLI_NOME,
      P.PAR_NUMPARCELA,
      P.PAR_SITUACAO,
      MAX(PAR_DTPGTO) AS DATA_PGTO,
      MAX(P.PAR_NUMPARCELA) AS PAR_NUMPARCELA
FROM TB_PARCELA P
WHERE P.PAR_SITUACAO = 'L'
AND P.PAR_DTPGTO =:DATA
GROUP BY P.VEN_CODIGO,
      P.CLI_CODIGO,
      P.CLI_NOME,
      P.PAR_NUMPARCELA,
      P.PAR_SITUACAO

Não cheguei a testar o código... me avise se é isso ou não..
Responder Citar

14/02/2015

Marlos Silva

obrigado pela sua ajuda!
o código de funcionar, funciona...
só que o resultado dele não pega apenas a ultima parcela que o meu caso, e nem mostra se a ultima parcela foi pago de fato no sistema...

ex: tenho duas parcelas 01 e 02 ambas pagas no mesmo dia.

preciso que ele me mostre apenas a segunda, mesmo que exista outras parcelas do mesmo contrato com as datas de pagamentos iguais.
Responder Citar

19/02/2015

Marisiana

Estranho porque eu fiz um teste aqui em uma base semelhante e funcionou...
Responder Citar

19/02/2015

Rrubinho

Conseguiu resolver, Marlos ?

O comando funcionou da forma que você quer tirando o P.PAR_NUMPARCELA da lista de campos e do group by, sem a necessidade do sub-select.
Acho que é isso, veja:

SELECT P.VEN_CODIGO,
      P.CLI_CODIGO,
      P.CLI_NOME,
      P.PAR_SITUACAO,
      MAX(PAR_DTPGTO) AS DATA_PGTO,
      MAX(P.PAR_NUMPARCELA) AS PAR_NUMPARCELA
FROM TB_PARCELA P
WHERE P.PAR_SITUACAO = 'L'
AND P.PAR_DTPGTO =:DATA
GROUP BY P.VEN_CODIGO,
      P.CLI_CODIGO,
      P.CLI_NOME,
      P.PAR_SITUACAO
Responder Citar