PostgreSQL平均时间戳差异(按组)

时间:2019-03-24 22:43:30

标签: sql postgresql

假设我有一个带有时间戳列timestamp和分组列foo的表。

例如

CREATE TABLE my_table (
    id        SERIAL PRIMARY KEY,
    foo       integer NOT NULL,
    timestamp timestamp without time zone NOT NULL
);

我想做的是获取每个组(GROUP BY foo)的平均时间差,然后获取这些平均值的平均值。

我唯一遇到的就是获取所有行的平均值(未分组):

SELECT avg(difference)
FROM ( 
  SELECT timestamp - lag(timestamp) OVER (ORDER BY timestamp) as difference
  FROM my_table
) t;

我正在运行PostgreSQL 9.6.11

2 个答案:

答案 0 :(得分:0)

SELECT avg(avg_diff) from (
  SELECT foo, avg(difference) as avg_diff
  FROM ( 
    SELECT timestamp - lag(timestamp) OVER (ORDER BY timestamp) as difference
    FROM my_table
  ) t
  group by foo
) t1;

答案 1 :(得分:0)

最简单的方法是简单的算术:

select (max(timestamp) - min(timestamp)) / (count(*) - 1)
from t;

也就是说,时间戳之间的平均持续时间是最大值减去最小值,然后除以时间戳总数减去1。

注意:这是假设时间戳是在增加还是在减少-对于这种类型的问题,这是很典型的。