SQL - 按自定义24小时周期对结果进行分组

时间:2013-04-24 16:21:58

标签: sql database oracle rdbms

我需要创建一个Oracle 11g SQL报告,显示每日生产力:24小时内装运的单位数量。每个时段从早上6点开始,到第二天上午5:59结束。

如何将结果分组以显示此24小时的时间段?我白天尝试分组,但是,一天是00:00 - 23:59,因此结果不准确。

结果将涵盖过去2个月。

非常感谢。

4 个答案:

答案 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列或类似内容,可能是这样的:

SQL Fiddle

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(*)