如果给出一年中每个日期 24 小时的平均值。我想将每小时的平均值扩展到每分钟的平均值。 例如给定
Date Time Average
01-Jan-15 23:00 20
02-Jan-15 00:00 50
02-Jan-15 01:00 30
我希望输出的计算结果如下......
DateTime AVG_VALUE
01/01/2015 23:00:00 20
01/01/2015 23:01:00 20.5
01/01/2015 23:02:00 21
01/01/2015 23:03:00 21.5
01/01/2015 23:04:00 22
01/01/2015 23:05:00 22.5
01/01/2015 23:06:00 23
01/01/2015 23:07:00 23.5
01/01/2015 23:08:00 24
01/01/2015 23:09:00 24.5
01/01/2015 23:10:00 25
01/01/2015 23:11:00 25.5
01/01/2015 23:12:00 26
01/01/2015 23:13:00 26.5
01/01/2015 23:14:00 27
01/01/2015 23:15:00 27.5
01/01/2015 23:16:00 28
01/01/2015 23:17:00 28.5
01/01/2015 23:18:00 29
01/01/2015 23:19:00 29.5
01/01/2015 23:20:00 30
01/01/2015 23:21:00 30.5
01/01/2015 23:22:00 31
01/01/2015 23:23:00 31.5
01/01/2015 23:24:00 32
01/01/2015 23:25:00 32.5
01/01/2015 23:26:00 33
01/01/2015 23:27:00 33.5
01/01/2015 23:28:00 34
01/01/2015 23:29:00 34.5
01/01/2015 23:30:00 35
01/01/2015 23:31:00 35.5
01/01/2015 23:32:00 36
01/01/2015 23:33:00 36.5
01/01/2015 23:34:00 37
01/01/2015 23:35:00 37.5
01/01/2015 23:36:00 38
01/01/2015 23:37:00 38.5
01/01/2015 23:38:00 39
01/01/2015 23:39:00 39.5
01/01/2015 23:40:00 40
01/01/2015 23:41:00 40.5
01/01/2015 23:42:00 41
01/01/2015 23:43:00 41.5
01/01/2015 23:44:00 42
01/01/2015 23:45:00 42.5
01/01/2015 23:46:00 43
01/01/2015 23:47:00 43.5
01/01/2015 23:48:00 44
01/01/2015 23:49:00 44.5
01/01/2015 23:50:00 45
01/01/2015 23:51:00 45.5
01/01/2015 23:52:00 46
01/01/2015 23:53:00 46.5
01/01/2015 23:54:00 47
01/01/2015 23:55:00 47.5
01/01/2015 23:56:00 48
01/01/2015 23:57:00 48.5
01/01/2015 23:58:00 49
01/01/2015 23:59:00 49.5
02/01/2015 50
02/01/2015 00:01:00 49.66666667
02/01/2015 00:02:00 49.33333333
02/01/2015 00:03:00 49
02/01/2015 00:04:00 48.66666667
02/01/2015 00:05:00 48.33333333
这个想法是获得两个区间之间的平滑的上升或下降图。在输出中,您可以看到随着我们从 20->50 移动,平均值随着分钟数的增加而逐渐增加
这可以使用 Oracle Query 或某些 PL/SQL 代码来实现吗?
最佳答案
编辑:添加联合以包含最后缺失的行
像这样的事情可能会起作用。假设输入数据在表a中,
with b as
(select level-1 lev
from dual
connect by level <= 60
),
v as
(
select start_date, value current_value, lead(value) over (order by start_date) next_value
from a
)
select start_date+ (lev)/(24*60), (current_value*((60-(b.lev))/60) + next_value*(b.lev)/60) avg_value
from v, b
where v.next_value is not null
union
select start_date, current_value
from v
where v.next_value is null
order by 1
关于sql - 如何在oracle中分散两个区间的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541384/