假设我有一个带有时间戳列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
答案 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。
注意:这是假设时间戳是在增加还是在减少-对于这种类型的问题,这是很典型的。