Sql 一组日期的标准偏差

Sql 一组日期的标准偏差,sql,postgresql,statistics,Sql,Postgresql,Statistics,我有一个列为id | client_id | datetime的交易表,我计算了交易之间的平均天数,以了解每个客户进行交易的频率: SELECT *, ((date_last_transaction - date_first_transaction)/total_transactions) AS frequency FROM ( SELECT client_id, COUNT(id) AS total_transactions, MIN(datetime) AS date_first_

我有一个列为
id | client_id | datetime
的交易表,我计算了交易之间的平均天数,以了解每个客户进行交易的频率:

SELECT *, ((date_last_transaction - date_first_transaction)/total_transactions) AS frequency 
FROM (
    SELECT client_id, COUNT(id) AS total_transactions, MIN(datetime) AS date_first_transaction, MAX(datetime) AS date_last_transaction
    FROM transactions
    GROUP BY client_id
) AS t;
使用postgresql计算一组日期的标准偏差(以天为单位)的现有方法是什么?如果可能的话,最好只使用一个查询:-)

我发现这样做:

SELECT extract(day from date_trunc('day', (
        CASE WHEN COUNT(*) <= 1 THEN 
            0 
        ELSE 
            SUM(time_since_last_invoice)/(COUNT(*)-1) 
        END
    ) * '1 day'::interval)) AS days_between_purchases, 
    extract(day from date_trunc('day', (
        CASE WHEN COUNT(*) <= 2 THEN 
            0 
        ELSE 
            STDDEV(time_since_last_invoice) 
        END
    ) * '1 day'::interval)) AS range_of_days
FROM (
    SELECT client_id, datetime, COALESCE(datetime - lag(datetime) 
              OVER (PARTITION BY client_id ORDER BY client_id, datetime
                 ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
              ), 0
           ) AS time_since_last_invoice
    FROM my_table 
    GROUP BY client_id, datetime
    ORDER BY client_id, datetime
)
选择提取日期(从日期算起的日期)(
当COUNT(*)stddev_samp()可能时,下面是列表:向下滚动到“表9-44.统计的聚合函数”