Re: Subquery problems - Mailing list pgsql-sql

From Masaru Sugawara
Subject Re: Subquery problems
Date
Msg-id 20070622012757.21BE.RK73@ghost.plala.or.jp
Whole thread Raw
In response to Subquery problems  (Ranieri Mazili <ranieri.oliveira@terra.com.br>)
List pgsql-sql
On Tue, 19 Jun 2007 09:17:22 -0300
Ranieri Mazili <ranieri.oliveira@terra.com.br> wrote:

Hi,

This reply is not accurate, but I think there are helpful hints.

--
Masaru Sugawara




select  C.id_production_area, B.id_machine_type, A.h_month as month, max(A.n) as div_mes,
cast((sum(A.qty_employees_total)         -(sum(A.qty_absence)          -sum(A.qty_vacation)
-sum(A.qty_diseased)         -sum(A.qty_indirect)          -sum(A.qty_transferred))
+sum(A.qty_received))/max(A.n)as integer)
 
from (select *       from        (select *, extract(month from h1.head_count_date) as h_month          from head_count
ash1          where extract(year from h1.head_count_date)               = extract(year from current_date)       ) as
h2,      (select extract(month from production_date) as p_month,          count(distinct p1.production_date) as n
  from production as p1          where extract(year from production_date)               = extract(year from
current_date)         group by extract(month from production_date)        ) as p2    where h2.h_month = p2.p_month ) as
A,machine B, machine_type C
 
where  A.id_machine = B.id_machine      AND B.id_machine_type = C.id_machine_type
group by C.id_production_area, B.id_machine_type, A.h_month
order by C.id_production_area, A.h_month, A.h_month DESC;





> Hello,
> 
> I'm having another "problem", I have a function that declares 12 
> variable, one per month and each them execute a select like bellow:
> *DIV_MES01 := (select count(distinct production_date) from production 
> where extract(month from production_date) = '01' and extract(year from 
> production_date) = EXTRACT(YEAR FROM current_date));
> 
> *Then, I need to check if the variable is equal 0:
> *IF DIV_MES01 = 0 THEN
>    DIV_MES01 := 1;
> END IF;
> 
> *Finally,  I perform the following query:
> 
> *SELECT    cast(((sum(A.qty_employees_total)
>           -(sum(A.qty_absence)
>           -sum(A.qty_vacation)
>           -sum(A.qty_diseased)
>           -sum(A.qty_indirect)
>           -sum(A.qty_transferred))
>           +sum(A.qty_received))/DIV_MES01) AS integer),
>           C.id_production_area,
>           cast('01' as text) AS mes
> FROM      head_count A, machine B, machine_type C
> WHERE     EXTRACT(YEAR FROM head_count_date) = EXTRACT(YEAR FROM 
> current_date)
>           AND EXTRACT(MONTH FROM head_count_date) = '01'
>           AND A.id_machine = B.id_machine
>           AND B.id_machine_type = C.id_machine_type
> GROUP BY C.id_production_area, B.id_machine_type
> 
> *Doing it, I need to perform 12 querys united by "UNION", what I want to 
> do is unify it in only one query, I tryed with the query bellow:
> 
> *SELECT     date_trunc('month', A.head_count_date)::date as head_date,
>            cast(((sum(A.qty_employees_total)
>            -(sum(A.qty_absence)
>            -sum(A.qty_vacation)
>            -sum(A.qty_diseased)
>            -sum(A.qty_indirect)
>            -sum(A.qty_transferred))
>            +sum(A.qty_received))/(select   count(distinct production_date)
>                                       from     production
>                                       where    extract(month from 
> production_date) = EXTRACT(MONTH FROM date_trunc('month', 
> A.head_count_date)::date)
>                                                and extract(year from 
> production_date) = EXTRACT(YEAR FROM current_date))) AS integer),
>            C.id_production_area
> FROM     head_count A, machine B, machine_type C
> WHERE    date_trunc('month', A.head_count_date)::date BETWEEN
>          date_trunc('month', current_date - (EXTRACT(MONTH FROM 
> current_date)-1) * interval '1 month')::date
>          AND date_trunc('month', current_date)::date
>          AND A.id_machine = B.id_machine
>          AND B.id_machine_type = C.id_machine_type
> GROUP BY C.id_production_area, B.id_machine_type, head_count_date,head_date
> ORDER BY id_production_area, head_count_date,head_date DESC
> 
> *But the results aren't what I want.
> What I trying to do is possible?
> 
> I appreciate any help.
> Thanks
> 





pgsql-sql by date:

Previous
From: "A. R. Van Hook"
Date:
Subject: join problem
Next
From: Ragnar
Date:
Subject: Re: join problem