У меня есть таблица со столбцами, похожими на: 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
Этот запрос выполняется вечно, так как это перекрестное соединение и приводит к декартовому произведению между таблицами. Любые предложения о том, как этого добиться? В таблице несколько миллионов событий, поэтому любые улучшения будут очень полезны!