我已经呆了几个小时了,我不知道如何正确执行此操作。
我有下表
name date
Clara 2017-07-16
Clara 2017-07-22
Mike 2017-07-07
Mike 2017-07-12
Mike 2017-07-18
我试图找出每个人的平均日期差异,以便
克拉拉返回6((2017-07-22-2017-07-16)/1)和
Mike返回5.5((2017-07-18-2017-07-12) (2017-07-12-2017-07-07)/2)/2)
name date
Clara 6
Mike 5.5
使用窗口函数来计算"name"
的两个后续日期之间的日期差,然后您可以计算平均值。
这是关于使用PostgreSQL文档中的窗口函数进行进一步阅读的好教程。
WITH datediffs AS (
SELECT
"name"
, EXTRACT('day' FROM date - LAG(date) OVER (PARTITION BY "name" ORDER BY "date")) diff
FROM raw_data
)
SELECT "name", avg(diff) avg_difference
FROM datediffs
GROUP By 1
您不需要窗口功能。平均时间差是总差异除以观测值减去。所以:
select name,
(max(date) - min(date) ) / nullif(count(*) - 1, 0)
from following_table t
group by name;