2013-02-20 2 views
3

У меня проблема с раздвижным окном. в частности, я не знаю, где должно начаться мое окно и где оно должно закончиться. Я знаю размер моего интервала/окна.sql скользящее окно - открытие максимального значения за интервал

Мне нужно найти начало/конец окна, которое обеспечивает наилучший (или худший, в зависимости от того, как вы смотрите на него).

вот пример набора данных:

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-20 00:04:00» до «2013-02-20 00:08:00» дадут мне сумму 400 + 500 + 600 + 500 + 400 = 2400 , что является самым высоким значением за 5 минут в этой таблице.

Я не против использования нескольких таблиц, если это необходимо. но я пытаюсь найти интервал «наилучшего случая». результаты могут идти в любом случае, до тех пор, пока они обрезают интервал. если я получаю все точки данных за этот интервал, он все равно работает. если я получу начальную и конечную точки, я тоже могу их использовать.

Я нашел несколько проблем с раздвижными окнами для SQL, но не нашел там, где размер окна является известным фактором, а отправная точка неизвестна.

+0

Какие СУБД вы используете? –

+0

Я использую postgres, и на данный момент у меня нет многих других опций. – jasonmclose

+0

@jasonmclose: какая версия PosgreSQL? – Quassnoi

ответ

6
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 
+0

Я попробовал, и у меня есть результат, но я понятия не имею, что я смотрю. где вы создали свой интервал, основанный на отметках времени? У меня проблемы с пониманием запроса. – jasonmclose

+0

@ jasonmclose: извините, ваш запрос был неправильным, я думал, вам нужно 5 записей, а не 5 минут. См. Новый запрос. – Quassnoi

+0

все. это делает именно то, что мне нужно для этого. большое вам спасибо за вашу помощь. – jasonmclose

Смежные вопросы