我有如下表格。我想计算购买天数
Visitorid date Purch_flag
A 1-May NULL
A 2-May NULL
A 3-May 1
B 1-May NULL
B 2-May 1
B 3-May NULL
B 4-May 1
C 1-May NULL
理想情况下,我想创建一个如下所示的输出表,其中包含开始日期和结束日期。购买相同的访客后,将有一个新的开始日期
Visitorid date Purch_flag start_date end_date
A 1-May NULL 1-May 3-May
A 2-May NULL 1-May 3-May
A 3-May 1 1-May 3-May
B 1-May NULL 1-May 2-May
B 2-May 1 1-May 2-May
B 3-May NULL 3-May 4-May
B 4-May 1 3-May 4-May
C 1-May NULL NULL NULL
答案 0 :(得分:0)
我认为您可以使用累计max()
和min()
窗口函数执行此操作:
select t.*,
coalesce(max(case when purch = 1 then date end) over (partition by visitorid order by date asc rows between unbounded preceding and 1 preceding),
min(date) over (partition by visitorid)
) as start_date
min(case when purch = 1 then date end) over (partition by visitorid order by date desc) as end_date
from t;
结束日期更容易解释。这是在给定记录上或之后购买的日期的最小值。
开始日期是在给定日期之前购买的日期的最大值。如果是NULL
,那么它就是访问者的第一个日期。