Я хочу сделать агрегирование на presto sql, оглядываясь назад на x часов / минут / секунд назад.
Данные
id | timestamp | status
-------------------------------------------
A | 2018-01-01 03:00:00 | GOOD
A | 2018-01-01 04:00:00 | BAD
A | 2018-01-01 05:00:00 | GOOD
A | 2018-01-01 09:00:00 | BAD
A | 2018-01-01 09:15:00 | BAD
A | 2018-01-01 13:00:00 | GOOD
A | 2018-01-01 14:00:00 | GOOD
B | 2018-02-01 09:00:00 | GOOD
B | 2018-02-01 10:00:00 | BAD
Результаты:
id | timestamp | status | bad_status_count
----------------------------------------------------------------
A | 2018-01-01 03:00:00 | GOOD | 0
A | 2018-01-01 04:00:00 | BAD | 1
A | 2018-01-01 05:00:00 | GOOD | 1
A | 2018-01-01 09:00:00 | BAD | 1
A | 2018-01-01 09:15:00 | BAD | 2
A | 2018-01-01 13:00:00 | GOOD | 0
A | 2018-01-01 14:00:00 | GOOD | 0
B | 2018-02-01 09:00:00 | GOOD | 0
B | 2018-02-01 10:00:00 | BAD | 1
Я считаю плохой статус за последние 3 часа по делам. Как я могу это сделать?
Я пытаюсь что-то вроде этого:
SELECT
id,
timestamp,
status
count(status) over(partition by id order by timestamp range between interval '3' hour and current_row) as bad_status_count
from table
Конечно, это еще не работает, и мне все еще приходится отфильтровывать плохое состояние. Я получил эту ошибку:
Error running query: line 7:1: Window frame start value type must be INTEGER or BIGINT(actual interval day to second)