[英]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.