postgreSQL查询以获得每个人的时差

时间:2017-09-14 22:06:27

标签: sql postgresql

我已经在这几个小时了,我无法弄清楚如何正确地做到这一点。

我有下表

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

2 个答案:

答案 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;