3

スライディングウィンドウに問題があります。具体的には、ウィンドウをどこから開始し、どこで終了するかわかりません。インターバル/ウィンドウのサイズを知っています。

最良の(または、見方によっては最悪の)ケースシナリオを提供するウィンドウの開始/終了を見つける必要があります。

データセットの例を次に示します。

 value  | tstamp
 100    | 2013-02-20 00:01:00
 200    | 2013-02-20 00:02:00
 300    | 2013-02-20 00:03:00
 400    | 2013-02-20 00:04:00
 500    | 2013-02-20 00:05:00
 600    | 2013-02-20 00:06:00
 500    | 2013-02-20 00:07:00
 400    | 2013-02-20 00:08:00
 300    | 2013-02-20 00:09:00
 200    | 2013-02-20 00:10:00
 100    | 2013-02-20 00:11:00

間隔を5分にする必要があることを知っているとしましょう。したがって、「値」の合計が最も高い5分間隔に含まれる値とタイムスタンプを知る必要があります。上記の例では、「2013-02-2000:04:00」から「2013-02-2000:08:00」までの行は、400 + 500 + 600 + 500 + 400=2400の合計になります。 、これはその表の5分間で最も高い値です。

必要に応じて複数のテーブルを使用することに反対していません。しかし、私は「ベストケースシナリオ」の間隔を見つけようとしています。結果は、間隔を相殺する限り、どちらの方向にも進むことができます。その間隔ですべてのデータポイントを取得しても、引き続き機能します。始点と終点がわかれば、それらも使えます。

SQLのスライディングウィンドウの問題をいくつか見つけましたが、ウィンドウサイズが既知の要因であり、開始点が不明な場所は見つかりませんでした。

4

1 に答える 1

11
SELECT  *,
        (
        SELECT  SUM(value)
        FROM    mytable mi
        WHERE   mi.tstamp BETWEEN m.tstamp - '5 minute'::INTERVAL AND m.tstamp
        ) AS maxvalue
FROM    mytable m
ORDER BY
        maxvalue DESC
LIMIT   1

PostgreSQL 11以降の場合:

SELECT  SUM(value) OVER (ORDER BY tstamp RANGE '5 minute' PRECEDING) AS maxvalue,
        *
FROM    mytable m
ORDER BY
        maxvalue DESC
LIMIT   1
于 2013-02-20T21:21:39.207 に答える