我找不到如何在 Oracle 中将 Select 语句与 group by 一起使用的解决方案。
我需要按时间戳列与工作时间段(从“当天”的 09:00 到 21:00)和第二个时间段(从前一天的 21:01 到“当天”的 08:59)在一个月内分组。
欢迎任何建议。谢谢。
我找不到如何在 Oracle 中将 Select 语句与 group by 一起使用的解决方案。
我需要按时间戳列与工作时间段(从“当天”的 09:00 到 21:00)和第二个时间段(从前一天的 21:01 到“当天”的 08:59)在一个月内分组。
欢迎任何建议。谢谢。
这个分组的关键是从 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
实际日期而不是实际日期(因此该月的前九个小时实际上是上个月的一部分)。
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
——给你“工作”或“其他”