SQL滑动窗口 - 找到了区间最大值(sql sliding window - finding ma

2019-07-20 06:18发布

我有一个滑动窗口的问题。 具体而言,我不知道我的窗口应该开始,它应该结束。 我知道我的时间间隔/窗口的大小。

我需要找到提供最佳(或最坏的情况,这取决于你如何看待它)的情况下窗口的开始/结束。

这里有一个例子数据集:

 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年2月20日00:04:00”的行以“2013年2月20日0点08分○○秒”会给我的总和400 + 500 + 600 + 500 + 400 = 2400 ,这是超过在该表5分钟最高值。

我不是反对,如果需要使用多个表。 但我试图找到一个“最好的情况”区间。 结果可以去任何一种方式,只要他们净赚的时间间隔。 如果我在所述间隔得到的所有数据点,它仍然有效。 如果我得到的起点和终点,我可以使用那些为好。

我已经找到了几个SQL滑动窗口的问题,但没有发现任何地方的窗口尺寸是已知的因素,而出发点是未知的。

Answer 1:

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


文章来源: sql sliding window - finding max value over interval