[英]PostgreSQL Average Timestamp Difference (by Group)
假设我有一个带有时间戳列,时间戳和分组列的表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
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;
最简单的方法是简单的算术:
select (max(timestamp) - min(timestamp)) / (count(*) - 1)
from t;
也就是说,时间戳之间的平均持续时间是最大值减去最小值除以时间戳总数小于1。
注意:这假设时间戳正在增加或减少 - 这对于此类问题非常典型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.