У меня есть таблица со столбцами, похожими на: event_id
, store_id
, event_datetime
.
Для каждого события я пытаюсь выяснить, сколько событий произошло в том же магазине за предыдущий час. Я знаю, что могу выполнить такой запрос:
SELECT
event_id,
COUNT(event_id) OVER (PARTITION BY store_id ORDER BY event_datetime
ROWS BETWEEN 5 preceding and current row)
FROM mtable;
чтобы получить 5 предыдущих событий в магазине, но мне нужно, чтобы это число изменялось на общее количество событий за последний час. Есть какой-либо способ сделать это? В противном случае мне придется присоединиться к таблице, например:
SELECT
event_id,
COUNT(prevevents.event_id)
FROM mtable m
INNER JOIN mtable prevevents
ON prevevents.event_datetime BETWEEN (m.event_datetime - interval '1 hour') AND
m.event_datetime
Этот запрос длится вечно, так как это перекрестное соединение, и в результате получается декартово произведение между таблицами. Любые предложения о том, как этого добиться? В таблице несколько миллионов событий, поэтому любые улучшения будут очень полезны!