1

我找不到如何在 Oracle 中将 Select 语句与 group by 一起使用的解决方案。

我需要按时间戳列与工作时间段(从“当天”的 09:00 到 21:00)和第二个时间段(从前一天的 21:01 到“当天”的 08:59)在一个月内分组。

欢迎任何建议。谢谢。

4

2 回答 2

1

这个分组的关键是从 datetime 中减去 9 个小时,得到“workdate”,然后用hour函数来判断是工作时间还是别的什么。这是一个例子:

select trunc(worktime - 9.0/24) as workdate,
       (case when hour(worktime) between 8 and 20 then 'WorkHours' else 'OtherHours' end),
       count(*)
from t
group by trunc(worktime - 9.0/24),
         (case when hour(worktime) between 8 and 20 then 'WorkHours' else 'OtherHours' end);

要检查特定月份,您可能希望使用workdate实际日期而不是实际日期(因此该月的前九个小时实际上是上个月的一部分)。

于 2013-08-23T11:50:58.220 回答
0
group by 
       trunc(timestamp_col, 'MM')
     , case 
          when to_char(timestamp_col, 'hh24') between '08' and '20' 
          then 'work' 
          else 'other'
       end

trunc(timestamp_col, 'MM') -- 给你一个月

case 
          when to_char(timestamp_col, 'hh24') between '08' and '20' 
          then 'work' 
          else 'other'
       end

——给你“工作”或“其他”

于 2013-08-23T11:57:25.070 回答