如何按日期顺序计算日期之间的平均天数
How to calculate average number of days between dates in date order
Table 包含订单日期
create table orderdate ( orderdate date not null )
如何计算 table 中日期之间的平均天数。
需要按日期顺序计算相邻日期之间的差异,以找到订单之间的平均日期数。
将此数字添加到上次订购日期会得出预计的下一次订购日期。
例如,如果 table 包含
2019-09-10
2019-09-21
2019-09-25
订单之间的差异为 10 天和 4 天,平均差异为
(10+4)/2 = 7 days
下一个订单预计日期是 2019-09-25 + 7 = 2019-10-02
正在使用
PostgreSQL 9.4.19
您可以使用聚合:
select ( max(date) - min(date) ) / nullif(count(*) - 1, 0) as avg_duration
from t;
间隙数比计数少1。因此,平均值是总持续时间除以间隔数。
先计算相邻日期的差值,然后取平均值:
SELECT avg(CAST(days_between AS double precision))
FROM (SELECT orderdate
- (lag(orderdate) OVER (ORDER BY orderdate)) AS days_between
FROM orderdate) AS q;
我转换为 double precision
,因为两个 date
之间的差异是 integer
。
Table 包含订单日期
create table orderdate ( orderdate date not null )
如何计算 table 中日期之间的平均天数。 需要按日期顺序计算相邻日期之间的差异,以找到订单之间的平均日期数。
将此数字添加到上次订购日期会得出预计的下一次订购日期。
例如,如果 table 包含
2019-09-10
2019-09-21
2019-09-25
订单之间的差异为 10 天和 4 天,平均差异为
(10+4)/2 = 7 days
下一个订单预计日期是 2019-09-25 + 7 = 2019-10-02
正在使用
PostgreSQL 9.4.19
您可以使用聚合:
select ( max(date) - min(date) ) / nullif(count(*) - 1, 0) as avg_duration
from t;
间隙数比计数少1。因此,平均值是总持续时间除以间隔数。
先计算相邻日期的差值,然后取平均值:
SELECT avg(CAST(days_between AS double precision))
FROM (SELECT orderdate
- (lag(orderdate) OVER (ORDER BY orderdate)) AS days_between
FROM orderdate) AS q;
我转换为 double precision
,因为两个 date
之间的差异是 integer
。