2013-08-05 3 views
1

У меня есть этот вопрос, и я не могу решить, потому что я думаю будет невозможно в SQLPostgres SQL 8.4 Использование Разница во времени и дате Разница Отдельно

У меня есть эта таблица

Shedule 
    id_emp Name  `time initial` time end 
    1   juan`  09:00`   12:00 
    2  Francisco 10:00   11:30 
    3  Sebastian 11:00   15:00 
    6  Roberto  15:00   18:00 


Suspension 
id_emp   suspension_initial  suspension_end 
1     2013-06-01   2013-06-01 
2     2013-06-01   2013-06-03 
3     2013-06-03   2013-06-04 
6     2013-06-01   2013-06-01 
2     2013-07-01   2013-07-01 
3     2013-07-05   2013-07-05 
1     2013-07-06   2013-07-06 

Я хочу, чтобы ((time_end- time_initial) - приостановление) (если у меня есть 1 день приостановки, это одна единица часового примера: Хуан работал 3 часа в день, и у него есть 1 день отсрочки в июне и один день отсрочки на июль. Так что я предполагаю, что за один месяц он работает 3 * 20 (Часы * работающие на день) - 3 часа июня и 3 часа июля Как я могу получить этот результат

id_emp name `  June-2013    July-2013 
1  Juan   57 (hours Worked)  57 (hours Worked) 
2  Francisco  24 (hours worked)  27 (hours worked) 
3  Sebastián 
6  Roberto 
+0

How '3 * 20 (часов * dayworked) - 3 часа июня' = 47 часов ? Думаю, я думаю. – Romesh

+0

Тнакс, есть ли у вас решение? =) – Frechi

+0

Что вы пробовали? Где ты застрял? – Romesh

ответ

0

Here is the SQLFiddel Demo

Ниже приведен запрос, который вы можете попробовать

select EmpHrs.ID_EMP, 
     EmpHrs.Name, 
     (
     (EmpHrs.NOOFHRS*20)- 
     (EmpHrs.NOOFHRS* 
      JuneSuspension.MONTHSUSPENSION) 
     ) as "June-2013", 
     (
     (EmpHrs.NOOFHRS*20)- 
     (EmpHrs.NOOFHRS* 
      JulySuspension.MONTHSUSPENSION) 
     ) as "July-2013" 

from 
(
select ID_EMP,NAME, 
     Extract(Hours from time_end-time_initial)+ 
     Extract(Minutes from time_end-time_initial)/60 as NoOfHrs 
    from schedule 
) EmpHrs 
Left join 
(select ID_EMP,to_char(to_timestamp (Extract(Month from suspension_initial)::text, 'MM'),'Mon') as MonthIni,(suspension_end::date - suspension_initial::date)+1 MonthSuspension 
from suspension 
where Extract(Month from suspension_initial) = 6) JuneSuspension 
On JuneSuspension.ID_EMP = EmpHrs.ID_EMP 
Left join 
(select ID_EMP,to_char(to_timestamp (Extract(Month from suspension_initial)::text, 'MM'),'Mon') as MonthIni,(suspension_end::date - suspension_initial::date)+1 MonthSuspension 
from suspension 
where Extract(Month from suspension_initial) = 7) JulySuspension 
On JulySuspension.ID_EMP = EmpHrs.ID_EMP 
+0

Спасибо, но Roberto uin july 2013 принес мне нуль? Я меняю свой результат, пожалуйста, прости меня – Frechi