首页 > 解决方案 > SQL查询查找客户第一次和第二次购买之间的平均天数?

问题描述

我有一个包含以下列的表格,需要一个查询来查找客户第一次和第二次购买之间的平均天数。

表名 Customer_purchases:

客户ID| 购买ID| 时间戳| 数量

字段名| 数据类型| 描述

customer_id|int|每个客户的唯一 ID

purchase_id|int|每次购买的唯一 ID

时间戳 | 日期时间 | 购买时间戳

金额 | 浮动| 客户为购买支付的金额

有什么建议么 ?

标签: sqlsql-server

解决方案


获取每个客户的第一次购买 [min(timestamp)],然后加入子查询,获取时间戳 > 第一个的 min(timestamp)。

;with first_purchase as 
(
    select
        customer_id,
        min(timestamp) as DateOfFirstPurchase
    from
        Customer_purchases
    group by
        customer_id
) 
select
    first_purchase.customer_id,
    first_purchase.DateOfFirstPurchase,
    second_purchase.DateOfSecondPurchase,
    datediff(dd, first_puchase.DateOfFirstPurchase, second_purchase.DateOfSecondPurchase) as NumDaysBetween
from    
    first_purchase fp
    inner join
    (
        select
            cp2.customer_id,
            min(timestamp) as DateOfSecondPurchase
        from
            dbo.Customer_purchases cp2
            inner join first_purchase fp on cp2.customer_id = fp.customer_id
        where
            cp2.timstamp > fp.DateOfFirstPurchase
        group by
            cp2.customer_id
    ) second_purchase on fp.customer_id = second_purchase.customer_id

这将为您提供所有原始数据,然后根据需要进行平均。


推荐阅读