CONSULTA DE CONTRATOS QUITADO NO PERÍODO
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]
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]
Marlos Silva
Curtidas 0
Respostas
Marisiana Battistella
14/02/2015
Olá Marlos!
Não entendi porque utilizastes o NOT EXISTS no teu SELECT....
Pelo que descrevestes, um SELECT como esse resolveria:
Não cheguei a testar o código... me avise se é isso ou não..
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..
GOSTEI 0
Marlos Silva
14/02/2015
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.
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.
GOSTEI 0
Marisiana Battistella
14/02/2015
Estranho porque eu fiz um teste aqui em uma base semelhante e funcionou...
GOSTEI 0
Renato Rubinho
14/02/2015
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:
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
GOSTEI 0