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


pgsql-sql by date:

Previous
From: "Christopher Kings-Lynne"
Date:
Subject: Re: recursive function returning "setof"
Next
From: Scott David Walter
Date:
Subject: Modify column type