我正在尝试使用Oracle
11g(在开发中为11.1,在生产中为11.2)进行数值分析,特别是在具有三列感兴趣的表的表上进行线性插值:时间戳,设备ID和值。
值列保存来自设备的数据(标识为deviceid),该数据是在时间戳记中指定的时间获取的。例如,这是伪数据,但是它给出了这样的想法:
time | deviceid | value
----------------|------------|-----------
01:00:00.000 | 001 | 1.000
01:00:01.000 | 001 | 1.030
01:00:02.000 | 001 | 1.063
01:00:00.050 | 002 | 553.10
01:00:01.355 | 002 | 552.30
01:00:02.155 | 002 | 552.43
来自设备001的时间戳与设备002的时间戳不匹配,但是我需要将来自设备001和002的值放在一行中,并带有一个时间戳,与设备001的时间戳匹配。我要结束的是像这样的东西:
time | device 001 | device 002
----------------|--------------|------------
01:00:00.000 | 1.000 | null
01:00:01.000 | 1.030 | 552.520
01:00:02.000 | 1.063 | 552.405
其中,基于在设备001的每个时间戳的任一侧的两个最接近的时间戳处收集的设备002的值对设备002的值进行线性插值。之所以会出现空值,是因为我在设备001的任一侧都没有两个时间戳01:00:00.000,我不想外推该值。
据我了解,我可以使用percentile_cont来执行此操作,但是我不理解我在网上看到的示例。例如,percentile_cont使用的百分位数从何而来?
在此先感谢您的帮助!
我不确定您将如何PERCENTILE_CONT
执行所需的插值,但是借助其他分析功能,您可以实现所需的插值。
首先,我们将创建以下函数,该函数将INTERVAL DAY TO SECOND
值转换为秒:
CREATE OR REPLACE FUNCTION intvl_to_seconds(
p_interval INTERVAL DAY TO SECOND
) RETURN NUMBER DETERMINISTIC
AS
BEGIN
RETURN EXTRACT(DAY FROM p_interval) * 24*60*60
+ EXTRACT(HOUR FROM p_interval) * 60*60
+ EXTRACT(MINUTE FROM p_interval) * 60
+ EXTRACT(SECOND FROM p_interval);
END;
/
通过此功能,我们可以使用如下查询:
SELECT d1.time,
d1.value AS value1,
q2.prev_value + intvl_to_seconds(d1.time - q2.prev_time) * (q2.next_value - q2.prev_value)/intvl_to_seconds(q2.next_time - q2.prev_time) AS value2
FROM devices d1
LEFT OUTER JOIN (SELECT d2.time AS prev_time,
d2.value AS prev_value,
LEAD(d2.time, 1) OVER (ORDER BY d2.time) AS next_time,
LEAD(d2.value, 1) OVER (ORDER BY d2.time) AS next_value
FROM devices d2
WHERE d2.deviceid = 2) q2
ON d1.time BETWEEN q2.prev_time AND q2.next_time
WHERE d1.deviceid = 1;
我在上面获取了您的数据,将时间戳记的日期部分设置为今天,当我运行上面的查询时,得到了以下结果:
TO_CHAR(D1.TIME)VALUE1 VALUE2
------------------------------------- ---------- --- -------
2011年9月9日01.00.00.000000 1
2011年9月9日01.00.01.000000 1.03 552.517625
2011年9月9日01.00.02.000000 1.063 552.404813
(我添加了一个TO_CHAR
环绕d1.time
以减少SQL * Plus中过多的间距。)
如果您使用DATE
s而不是TIMESTAMP
s,则不需要此函数:您可以减去日期。
问题内容: 我想使用python执行blinear插值。 我要插入高度的示例gps点是: 使用具有已知坐标和高度值的四个相邻点: 这是我的原始尝试: 其中z0和z1 我得到31.964,但从其他软件得到31.961。 我的脚本正确吗? 您可以提供另一种方法吗? 问题答案: 这是您可以使用的可重用功能。它包括doctest和数据验证: 您可以通过添加以下内容来运行测试代码: 在数据集上运行插值将产生
问题内容: 假设我得到的数据如下: 我想设计一个函数,该函数将使用Python在和,至之间进行线性插值。 我曾尝试浏览本Python教程,但仍然无法理解。 问题答案: 据我了解您的问题,您想编写一些函数,这将给您带来一些价值?然后,基本思路如下: 查找定义了包含的间隔的值的索引。例如,对于您的示例列表,包含间隔为,索引为, 用(即)计算该间隔的斜率。 的值在是现在值加上斜率乘以从距离。 您还需要确
问题内容: 摘要: 当在线程中引发断言错误时,单元测试不会消失。这是有道理的,因为不应允许一个线程使另一线程崩溃。问题是我该如何1)当第一个帮助程序线程崩溃时使整个测试失败,或者2)遍历并确定每个线程完成后的状态(请参见下面的代码)。后者的一种方法是通过每个线程具有状态变量,例如“ boolean [] statuss”,并具有“ statuses [i] == false”表示线程失败(可以扩展
本文向大家介绍如何执行批量插入?相关面试题,主要包含被问及如何执行批量插入?时的应答技巧和注意事项,需要的朋友参考一下 首先,创建一个简单的 insert 语句: 然后在 java 代码中像下面这样执行批处理插入:
如何执行cucumber从maven与标签? 我试过的是 mvn清洁测试-Dcucumber。滤器tags=“@TestTag” 我的pom.xmltestng.xml文件,(是否有一种方法可以避免执行脚本from.xml文件,并直接使用场景或功能文件的标记名称?) 使用cucumber.io7.0.0
我是一名学生,开始学习线性回归。我们得到了一个手动回归公式:(X.T*X)**-1*X.T*y还有一个简单数组的例子: 现在我想用Boston数据集对多个变量做同样的处理。我需要创建一个类,该类的功能与LinearRegression()相同。一定有。fit()方法和。预测方法。当数组有超过1列时,如何操作没有任何解释。。。所以我很困惑。 以下是我最初所做的: 但它只返回1个系数,我不确定它是否正