繁体   English   中英

根据 sql 中的自定义条件查找第二次客户访问

[英]Find second customer visit based on custom conditions in sql

我在 postgre sql 中有一个客户访问表,其中包含以下字段customer_idvisit_datepurchase_amount 对于每个独特的客户,我想找到他们的第一次和第二次访问。

我发现他们的第一次治疗是

min(d.visit_date) OVER (PARTITION BY d.customer_id) as index_visit_date

我无法弄清楚如何找到第二次治疗,因为我想将第二次访问定义为 index_visit_date 至少 60 天后的访问。

因此,如果客户有以下访问历史:

 id|visit_date|purchase_amount
 1 | 10-19-19 |1000
 1 | 10-24-19 |100
 1 | 12-15-19 |1000

index_visit_date = 10-19-19 和 second_treatment = 12-15-19

我不确定如何计算从 index_visit_date 到 select 作为第二次治疗后至少 60 天的下一次访问的时间差。

一种方法是横向连接:

select vfirst.*, vnext.*
from (select distinct on (id) v.*
      from visits v
      order by id, visit_date
     ) vfirst left join lateral
     (select vnext.*
      from visits vnext
      where vnext.id = vfirst.id and
            vnext.visit_date >= vfirst.visit_date + interval '60 day'
      order by vnext.visit_date
      limit 1
     ) vnext
     on true;

实际上,如果您只想要日期,还有更简单的方法,例如:

select v.*
from (select v.*,
             row_number() over (partition by id order by visit_date) as seqnum,
             min(visit_date) over (partition by id
                                   order by visit_date
                                   range between '60 day' following and unbounded following
                                  ) as next_visit_date
      from visits v
     ) v
where seqnum = 1

是一个 db<>fiddle。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM