我需要创建一个 Oracle 11g SQL 报告来显示每日生产力:在 24 小时内运送了多少单位。每个时段从早上 6 点开始,到第二天早上 5:59 结束。
如何以显示这 24 小时期间的方式对结果进行分组?我试过按天分组,但是一天是 00:00 - 23:59,所以结果不准确。
结果将涵盖过去 2 个月。
非常感谢。
天数是 oracle 中的整数,所以早上 6 点是一天的 0.25,所以:
select
trunc(date + 0.25) as period, count(*) as number
from table
group by trunc(date + 0.25 )
我目前还没有甲骨文可以尝试。
group by trunc(your_date - 1/4)
好吧,您可以按计算日期分组。因此,将日期添加 6 小时并按该日期分组,然后在技术上正确分组您的日期并产生正确的结果。
假设您的桌子上有一个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 点,则减法将使其落在午夜之前,并且当结果值被截断时(删除时间元素,返回午夜的日期),它属于前一天的分组。
结果:
| 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(*)
改为替换。