我有一个参数表,值和记录这些值的时间。
我有一个需要时间的程序,并且需要在该时间范围内 -15/+5 秒的时间窗口内获得每个参数值的平均结果。最重要的是,我想确保在过去的时间之前不超过 15 条记录,之后不超过 5 条记录。
例如,也许我每秒都在记录一些参数的值。如果我在 21:30:30 的时间过去,我想获得 21:30:15 和 21:30:35 之间的值。但如果我每半秒记录一次,我实际上会拥有比我想要的更多的适合那个时间框架的参数,这就是我需要限制我的结果的地方。
我已经阅读了这个问题和这篇文章,它们似乎与我正在尝试做的事情非常相关,但不幸的是我正在处理 Oracle 而不是 MySQL,所以我不能使用“限制”。
我目前有一些看起来像这样的东西:
std_values as
(
select
V.ParameterId,
V.NumericValue,
from
ValuesTable V
where
V.ValueSource = pValueSource
and V.Time >= pSummaryTime - 15/86400
and V.Time <= pSummaryTime + 5/86400
)
select
ParameterId,
avg(NumericValue) as NumericValue
from
std_values
group by
ParameterId
pValueSource
只是让我过滤掉我正在查看的值类型的东西,并且pSummaryTime
是我基于时间框架的输入时间。这里的目标是获取该pSummaryTime
窗口之前的 15 条记录,以及之后的 5 条记录,并将其用作平均值。目前我并没有限制“之前”和“之后”结果的数量,所以我最终得到了落在该时间窗口内的所有内容的平均值。如果没有“限制”之类的东西,我不确定如何在 Oracle 中执行此操作。