Fórum Query inteligente mas complexa, para mim. #45313
05/07/2004
0
Tenho duas tabelas (CARNÊ e CARNÊ PRESTAÇÕES):
CREATE TABLE CARNE ( ID_CARNE INTEGER NOT NULL, NU_CARNE INTEGER NOT NULL, NU_VALOR NUMERIC(9,2) NOT NULL, DT_AQUISICAO DATE DEFAULT CURRENT_DATE NOT NULL ST_NOME VARCHAR(50) NOT NULL COLLATE PXW_INTL850, NU_PRESTACOES SMALLINT DEFAULT 12 NOT NULL );
CREATE TABLE CARNE_PRESTACAO ( ID_CARNE INTEGER NOT NULL, DT_PAGAMENTO DATE DEFAULT CURRENT_DATE NOT NULL, NU_VALOR_PAGO NUMERIC(9,2) NOT NULL, NU_PRESTACAO SMALLINT DEFAULT 1 NOT NULL ); ALTER TABLE CARNE_PRESTACAO ADD CONSTRAINT FK_CARNE_PRESTACAO FOREIGN KEY (ID_CARNE) REFERENCES CARNE (ID_CARNE) ON DELETE CASCADE ON UPDATE CASCADE;
O carnê pode ter qualquer número de prestações. Preciso fazer uma query que relacione quais carnês estão com a data de pagamento atrasada.
Obrigado
Tenil
Curtir tópico
+ 0Posts
05/07/2004
Beppe
1) Adicione um novo campo(BO_PAGO INTEGER NOT NULL) em CARNE_PRESTACAO;
2) A sua query pegará as linhas com BO_PAGO = 0 e DT_PAGAMENTO < data atual.
Boa sorte.
Gostei + 0
05/07/2004
Motta
DT_PAGAMENTO DATE DEFAULT CURRENT_DATE NOT NULL,
NOT NULL ? É SE NÃO FOR PAGO
ACHO QUE FALTA UMA DATA DE VENCIMENTO EM PRESTACAO POIS O DIA DO VENCIMENTO PODE VARIAR , SABADOS DOMINGOS FERIADOS
COM ESTE MODELO A QUERY FICA SEM DIFICIL POIS VC TERÁ QUE CALCULAR TODA A DATA DE VENCIMENTO ...
Gostei + 0
05/07/2004
Afarias
Acredito Motta, que esta é a data de VENCIMENTO (quando deve ser paga a prestação) e não da data de efetivação do pagamento :)
Dentro do q o Beppe falou fica beleza! Ou como vc colocou, usando + 1 campo para conter a data do pagamento pelo cliente.
T+
Gostei + 0
06/07/2004
Motta
CREATE TABLE CARNE_PRESTACAO (
ID_CARNE INTEGER NOT NULL,
dt_vencimento date not null
DT_PAGAMENTO DATE NULL,
NU_VALOR_PAGO NUMERIC(9,2) NOT NULL,
NU_PRESTACAO SMALLINT DEFAULT 1 NOT NULL
);
cada prestação poderia ter um dia de vencimento diferente, sab/dom/feriados etc.
para ver atrasos
select *
from carne_prestacao
where dt_pagamento is null or
dt_pagamento > dt_vencimento
existem outras soluções claro !!
Gostei + 0
06/07/2004
Tenil
A data de vencimento da 2ª prestação é 2 mêses após a data de aquisição.
A data de vencimento da 3ª prestação é 3 mêses após a data de aquisição.
E por aí vai.
Gostei + 0
06/07/2004
Tenil
Eu acho que o modelo não está errado, não está é muito prático.
Não, toda vez que uma prestação é paga, cria-se na tabela filha (CARNE_PRESTACAO) um registro. Por isso a DT_PAGAMENTO é NOT NULL.
As datas de vencimento são como fiz no post anterior.
Mas vc tem razão, não está nada prático. Por favor, continue me ajudando.
Gostei + 0
06/07/2004
Motta
add_months , funcao que soma x meses a uma data
not exists - indica se tal registre existe
select *
from carne c
where not exists (select null
_______________from carne_prestacao cp
_______________where cp.id = c.id
_______________and add_months(c.dt_aquis,x) = cp.dt_pagamento)
x é o nº da prestacao (x-1 se vencer a primeira na data ...)
o problema e a function add_months no caso
espero ter ajudado
Gostei + 0
06/07/2004
Tenil
Alguém sabe se existe esta função no interbase?
Gostei + 0
06/07/2004
Gandalf.nho
[url]http://rfunc.sourceforge.net/[/url]
Gostei + 0
06/07/2004
Tenil
Muito legal, tem muitas funções úteis mesmo.
Mas como é que se usa?
Fiz o download mas fiquei boiando... :oops:
Gostei + 0
06/07/2004
Gandalf.nho
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)