我需要创建一个Oracle 11g SQL报告,显示每日生产力:24小时内装运的单位数量。每个时段从早上6点开始,到第二天上午5:59结束。
如何将结果分组以显示此24小时的时间段?我白天尝试分组,但是,一天是00:00 - 23:59,因此结果不准确。
结果将涵盖过去2个月。
非常感谢。
答案 0 :(得分:2)
group by trunc(your_date - 1/4)
答案 1 :(得分:2)
天数是oracle中的整数,所以早上6点将是0.25天 所以:
select
trunc(date + 0.25) as period, count(*) as number
from table
group by trunc(date + 0.25 )
我目前没有一个神谕可以试用它。
答案 2 :(得分:0)
好吧,你可以按计算日期进行分组。 因此,将6小时添加到日期和组中,然后在技术上将您的日期正确分组并生成正确的结果。
答案 3 :(得分:0)
假设您的桌子上有units
列或类似内容,可能是这样的:
SELECT
TRUNC(us.shipping_datetime - 0.25) + 0.25 period_start
, TRUNC(us.shipping_datetime - 0.25) + 1 + (1/24 * 5) + (1/24/60 * 59) period_end
, SUM(us.units) units
FROM units_shipped us
GROUP BY TRUNC(us.shipping_datetime - 0.25)
ORDER BY 1
这从每个日期减去6小时(0.25天)。如果时间早于早上6点,则减法将使其在午夜之前下降,并且当结果值被截断(时间元素被移除,返回午夜的日期)时,它将落入前一天的分组中。 / p>
<强> Results 强>:
| PERIOD_START | PERIOD_END | UNITS |
-----------------------------------------------------------------------
| April, 22 2013 06:00:00+0000 | April, 23 2013 05:59:00+0000 | 1 |
| April, 23 2013 06:00:00+0000 | April, 24 2013 05:59:00+0000 | 3 |
| April, 24 2013 06:00:00+0000 | April, 25 2013 05:59:00+0000 | 1 |
SELECT中的动态数学运算只是为了帮助读取结果的可读性。如果您的units
列没有SUM()
,即每行代表一个单元,请替换COUNT(*)
。