我已经在这几个小时了,我无法弄清楚如何正确地做到这一点。
我有下表
name date
Clara 2017-07-16
Clara 2017-07-22
Mike 2017-07-07
Mike 2017-07-12
Mike 2017-07-18
我想弄清楚每个人的平均日期差异,以便
Clara返回6((2017-07-22 - 2017-07-16)/ 1)和
迈克回归5.5((2017-07-18 - 2017-07-12)+(2017-07-12 - 2017-07-07)/ 2)
name date
Clara 6
Mike 5.5
答案 0 :(得分:0)
使用窗口函数计算"name"
的两个后续日期之间的日期差异,然后您可以计算平均值。
这是一个关于使用窗口函数from the postgresql documentation进行进一步阅读的好教程。
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
答案 1 :(得分:0)
您不需要窗口功能。平均时差是总差异除以观察数减1。所以:
select name,
(max(date) - min(date) ) / nullif(count(*) - 1, 0)
from following_table t
group by name;