2014-02-06 228 views
0

我有一個會話活動表與日期。按日期分組按日期分組

sess_actv (id number,actv number,start_date TIMESTAMP(3)) 

我想白天和我的工作時間(上午8點至下午8點),休息小時(其餘)的活動總和。因此,每天我會得到2排,工作時間組和白天小組。

這樣的:

select sum(actv), 'work/off hours' 
from sess_actv 
group by 'work and off hours'; 

示例表數據

id  actv  start_date 
---  -----  ------------ 
1  2   21-NOV-13 2.30.02.358 am  
2  4   21-NOV-13 10.30.02.358 am 
3  7   21-NOV-13 2.30.02.358 pm 
4  1   21-NOV-13 10.30.02.358 PM 
5  7   22-NOV-13 2.30.02.358 pm 
6  1   22-NOV-13 10.30.02.358 PM 

查詢應該返回:

date     sum(actv) 
-----     ---------- 
Thursday work hours  11  
Thursday off hours  3  
friday work hours  7  
friday off hours  1  
+0

我不知道該怎麼做。我設法按天和/或按小時分組,而不是按小時分組。 – Nir

+0

這裏有兩個問題需要解決。 (1)你如何判斷工作或休息時間? Answer ='8到16'之間的'EXTRACT(從start_date開始)「(2)如何確定星期幾? Answer ='to_char(start_date,'DAY')'。 – Turophile

回答

1

這個版本讓你想要什麼分三路:

select to_char(start_date, 'Day') as dow, 
     (case when extract(hour from start_date) between 8 and 19 
      then 'work/on hours' 
      else 'work/off hours' 
     end) as period, 
     sum(actv) 
from sess_actv 
group by to_char(start_date, 'Day'), 
     (case when extract(hour from start_date) between 8 and 19 
       then 'work/on hours' 
       else 'work/off hours' 
      end)