【发布时间】:2018-10-28 21:43:01
【问题描述】:
我有一个网站上的用户交互表,我需要计算每个用户交互之间的平均时间。为便于理解,以下是该表的一些记录:
其中第一列是用户 ID,第二列是交互时间。我需要的结果是每个用户交互之间的平均时间。示例:
- 用户12345平均互动间隔为1天
我已经尝试使用窗口函数,但我无法获得平均值,因为 PostgreSQL 不允许我在窗口函数上使用 GROUP BY 或 AVG,我可以使用以下命令获取间隔,但不能t 根据用户 ID 对其进行分组。
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;
但是这个函数只返回几行一列的空值。
有没有更好的方法来做到这一点?
【问题讨论】:
-
是的,它有,但用户交互没有排序。用户 X 可以在一些用户 Y 交互之间进行交互。但是interaction_id是有顺序的!
标签: sql postgresql date group-by average