3

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

如何以显示这 24 小时期间的方式对结果进行分组?我试过按天分组,但是一天是 00:00 - 23:59,所以结果不准确。

结果将涵盖过去 2 个月。

非常感谢。

4

4 回答 4

2

天数是 oracle 中的整数,所以早上 6 点是一天的 0.25,所以:

select 
trunc(date + 0.25) as period, count(*) as number
from table
group by trunc(date + 0.25 )

我目前还没有甲骨文可以尝试。

于 2013-04-24T16:29:30.873 回答
2
group by trunc(your_date - 1/4)
于 2013-04-24T16:25:47.340 回答
0

好吧,您可以按计算日期分组。因此,将日期添加 6 小时并按该日期分组,然后在技术上正确分组您的日期并产生正确的结果。

于 2013-04-24T16:25:03.883 回答
0

假设您的桌子上有一个units列或类似的列,可能是这样的:

SQL小提琴

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(*)改为替换。

于 2013-04-24T22:03:35.593 回答