sql - 如何在oracle中分散两个区间的平均值

标签 sql oracle oracle11g intervals

如果给出一年中每个日期 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/

相关文章:

sql - 选择某一年 Oracle 的记录

SQL Server 2008 身份 key 自动递增问题

sql - ORA-00935如何触发?深入了解 Oracle SQL 的嵌套组函数方法

sql - Oracle:如何查找模式中上次更新(任何表)的时间戳?

mysql - 我怎样才能为 mysql 编写一条 select 语句,而我只不需要字符串中的第二个字母?

java - JDBC 调用 Oracle 存储过程,参数类型为 PL SQL 表

sql - Oracle SQL 时间戳格式

mysql - 元素重复至少 3 次

sql - Oracle PL SQL Procedure 需要修改以接受具有所有类型字符的数组并拆分

c# - Entity Framework 的 ODAC 输出格式错误的 SQL?