У меня есть таблица взаимодействий пользователей на веб-сайте, и мне нужно рассчитать среднее время между взаимодействиями каждого пользователя.Чтобы сделать его более простым для понимания, вот некоторые записи таблицы:
Где первый столбец - это идентификатор пользователя, а второй - время взаимодействия.Результаты, которые мне нужны, это среднее время между взаимодействиями каждого пользователя.Пример:
- Средний интервал взаимодействия пользователя 12345 составляет 1 день
Я уже пытался использовать оконные функции, но не смог получить среднее значение, потому что PostgreSQL неМне не разрешалось использовать GROUP BY или AVG для оконных функций, я мог получить интервалы с помощью следующей команды, но не смог сгруппировать их по идентификатору пользователя.
SELECT INTERACTION_DATE - LAG(INTERACTION_DATE ) OVER (ORDER BY INTERACTION_DATE )
Итак, я решил создатьмоя собственная пользовательская функция, и после этого создайте пользовательскую агрегатную функцию, чтобы сделать это, и используйте эту функцию в выражении group by:
CREATE OR REPLACE FUNCTION DATE_INTERVAL(TIMESTAMP)
RETURNS TABLE (USER_INTERVALS INTERVAL)
AS $$
SELECT $1 - LAG($1) OVER (ORDER BY $1)
$$
LANGUAGE SQL
IMMUTABLE;
Но эта функция возвращает только несколько строк с одним столбцом с нулевым значением.
Есть ли лучший способ сделать это?