在 PostgreSQL 中,计算一个 ID 在单个 Date 列中出现的平均持续时间(时间间隔)

In PostgreSQL, calculate the average duration (interval of time) that an ID appears in a single Date column

背景

我是 SQL 和 Postgres 的新手。我正在尝试获取有关汽车和摩托车保险索赔的大型 table 中某些数据的一些基本描述 -- 请调用 table claims。数据有 ~15 列,但这里只有 2 列相关:

     id        | claim_date   |
---------------+--------------|
 001           |  2011-01-30  |
 001           |  2012-04-12  |
 001           |  2014-06-27  |
 002           |  2017-09-03  |
 002           |  2018-12-25  |

问题

我想知道 ID 出现在该数据集中的平均时间间隔。如果我手动执行此操作,我将为每个 ID 从最新的 claim_date 中减去最早的 claim_date,将它们相加,然后除以不同 ID 的数量(2,在这个案例)。这会给我 861 天的结果。

主要问题是我不太确定如何在 Postgres 中以查询形式写出来。

我试过的

在类似的帖子中,其他用户询问了如何从一个 date 列中减去另一列中的日期以获得日期间隔,但这并不是我想要的。

我试过这样的查询:

select max(claims.claim_date) - min(claims.claim_date) date_diff
from claims
group by ID

但只是让我分道扬镳,只是每个 IDmax-min 间隔列表。我也试过像这样使用 AVG

select AVG(max(claims.claim_date) - min(claims.claim_date))
from claims
group by ID

但是这里我得到错误 ERROR: aggregate function calls cannot be nested

有什么想法吗?

只需使用两个级别的聚合。

SELECT avg(d) AS ad
       FROM (SELECT max(claim_date)
                    - min(claim_date) AS d
                    FROM claims
                    GROUP BY id) AS x;