PostgreSQL查询以获取每人的时间差



我已经呆了几个小时了,我不知道如何正确执行此操作。

我有下表

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;

最新更新