在 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
但只是让我分道扬镳,只是每个 ID
的 max
-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;
背景
我是 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
但只是让我分道扬镳,只是每个 ID
的 max
-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;