Re: sql subqueries problem - Mailing list pgsql-sql

From Stephan Szabo
Subject Re: sql subqueries problem
Date
Msg-id 20020819094344.C31592-100000@megazone23.bigpanda.com
Whole thread Raw
In response to sql subqueries problem  (Mathieu Arnold <mat@mat.cc>)
Responses Re: sql subqueries problem  (Mathieu Arnold <mat@mat.cc>)
List pgsql-sql
On Mon, 19 Aug 2002, Mathieu Arnold wrote:

> 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 AS dr 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        | double precision
>  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           | character varying(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    | character varying(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 ?

I don't think f is in scope on those subqueries.
Can you put the clauses on the outer where or as part of the
join conditions?



pgsql-sql by date:

Previous
From: Scott David Walter
Date:
Subject: Modify column type
Next
From: "Nick Fankhauser"
Date:
Subject: Re: need assistance with multi-row matching expression