sql subqueries problem - Mailing list pgsql-sql
| From | Mathieu Arnold |
|---|---|
| Subject | sql subqueries problem |
| Date | |
| Msg-id | 20595214.1029780910@andromede.reaumur.absolight.net Whole thread Raw |
| Responses |
Re: sql subqueries problem
|
| List | pgsql-sql |
Hi
I have my accounting in a database, and I have a problem with subqueries,
here is what I have :
SELECT f.numero, f.id_client, f.date_creation, (f.date_creation + (f.echeance_paiement||'
days')::interval)::date
AS echeance, f.montant_ttc, ROUND(CASE WHEN remise IS NULL THEN 0 ELSE remise END - CASE WHEN
facture IS NULL THEN 0 ELSE facture END,2) AS solde, CASE WHEN (f.date_creation + (f.echeance_paiement||'
days')::interval)::date < 'now'::date THEN round(f.montant_ttc * 10 / 100 * ('now'::date -
(f.date_creation + (f.echeance_paiement||' days')::interval)::date)::int /
365, 2) ELSE NULL END AS penalite
FROM facture AS f JOIN (SELECT ff.id_client, SUM(ff.montant_ttc / df.taux) AS facture
FROM facture AS ff JOIN devise AS df USING (id_devise) GROUP BY ff.id_client
) AS fff USING (id_client) LEFT OUTER JOIN (SELECT rr.id_client,
SUM(rr.montant/ dr.taux) AS remise FROM remise AS rr JOIN devise
ASdr USING (id_devise) GROUP BY rr.id_client ) AS rrr USING (id_client)
WHERE ROUND(CASE WHEN remise IS NULL THEN 0 ELSE remise END - CASE WHEN
facture IS NULL THEN 0 ELSE facture END,2) < 0
GROUP BY f.numero, f.date_creation, f.date_creation +
(f.echeance_paiement||' days')::interval, f.id_client, f.montant_ttc,
rrr.remise, fff.facture
ORDER BY f.id_client, f.numero
Table "facture" Column | Type
-------------------+-----------------------id_facture | integer date_creation | date
date_modif | date echeance_paiement | integer id_client | integer
id_devise | integer genere | integer montant_ht |
doubleprecision montant_tva | double precision montant_ttc | double precision
solde_anterieur | double precision total_a_payer | double precision numero | character
varying(15)ref | character varying(60) responsable | character varying(60) contact |
charactervarying(60) num_tva | character varying(60) adresse | text pied
| text commentaire | text email | text
Table "remise" Column | Type
----------------+------------------id_remise | integer date_paiement | date date_remise |
date id_client | integer id_type_remise | integer id_devise | integer
id_banque | integer montant | double precision commentaire | text Table
"devise"Column | Type
-----------+-----------------------id_devise | integer taux | double precision devise |
charactervarying(30) symbole | character varying(15)
It finds the invoices (facture) from my customers who forgot to pay me.
but, the probem is that it gives me all the invoices and not only the ones
which are not paid, so, I wanted to add something like :
WHERE ff.date_creation <= f.date_creation
in the first subselect, and
WHERE rr.date_paiement <= f.date_creation
in the second subselect, but I can't because postgresql does not seem to be
able to do it. Any idea ?
--
Mathieu Arnold