【发布时间】:2016-11-24 20:59:33
【问题描述】:
我有一个名为 IMETERDATA 的表:
DEVNAME VARCHAR2(25)
DEVID VARCHAR2(8)
USEDATE TIMESTAMP(6)
INSTANTPOWER NUMBER(3,0)
TOTALENERGY NUMBER(7,4)
ROWNUMBER NUMBER(4,0)
我想计算并显示每 2 小时的 Totalenergy 平均值。例如,如果我有特定日期的数据(例如 2016 年 11 月 22 日),我想计算以下时段的 Totalenergy 平均值:12am-2am、2am-4am .... 10pm-12pm。我想计算指定间隔的所有日期的平均值。到目前为止我做了什么:
select to_number(to_char(USEDATE, 'HH24')) as "HOUR",
avg(TOTALENERGY) as "AVERAGE", TRUNC(USEDATE, 'DD') as "DATE"
from IMETERDATA
WHERE TRUNC(USEDATE) in (select DISTINCT(TRUNC(USEDATE, 'DD'))
from IMETERDATA) and (to_number(to_char(USEDATE, 'HH24')) >= 12 and to_number(to_char(USEDATE, 'HH24')) < 14 )
group by to_number(to_char(USEDATE, 'HH24')), TRUNC(USEDATE, 'DD');
此查询仅提供从中午 12 点到下午 2 点的平均值。如何计算 24 小时?我想要从上午 12 点到晚上 11.59 的结果,间隔 2 小时:
12AM - 2AM ---> 58.50
2AM - 4AM ----> 60.35
...
10PM - 11.59PM --> 40.35
【问题讨论】:
-
您需要使用
start_time, end_time创建一个小时范围表,然后加入您的查询,以便每小时获得一个范围。然后按范围分组 -
嗯。我可以在不创建另一个表的情况下做到这一点吗?当循环更改小时时,我尝试在 .psp 文件中执行,但它很混乱。
-
什么是psp?您可以使用
WITH来使用时间查询 -
@JuanCarlosOropeza 我正在使用 PSP (PL/SQL Server Page) 在浏览器中显示查询。