パラメータ、値、およびそれらの値が記録された時間の表があります。
時間がかかる手順があり、その時間枠で-15/+5秒の時間枠で各パラメーター値の平均結果を取得する必要があります。その上で、時間の経過前に 15 レコードを超えないようにし、時間経過後に 5 レコードを超えないようにしたいと考えています。
たとえば、あるパラメータの値を毎秒記録しているかもしれません。21:30:30 を過ぎた場合、21:30:15 と 21:30:35 の間の値を取得したいと思います。しかし、0.5 秒ごとに記録すると、実際にはその時間枠に収まるパラメーターが必要以上に多くなり、結果を制限する必要が生じます。
私がやろうとしていることとかなり関連しているように見えるこの質問とこの記事を読みましたが、残念ながら私はMySQLではなくOracleを扱っているので、「制限」を使用できません。
私は現在、次のようなものを持っています:
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でこれを行う方法がわかりません。