我有如下数据:
我想为相同的访问者将行分组,这些访问者拥有purchase =1,以及他们以前所有的访问,而在那里,purchase = 0。对于上述数据示例,应将行分组为:
如何才能做到这一点?我正在使用Server 2012。
我预期的产出如下:
生成上述数据的代码:
CREATE TABLE [#tmp_data]
(
[visitor] INT,
[visit_id] INT,
[visit_time] DATETIME,
[purchase] BIT
);
INSERT INTO #tmp_data( visitor, visit_id, visit_time, purchase )
VALUES( 1, 1001, '2020-01-01 10:00:00', 0 ),
( 1, 1002, '2020-01-02 11:00:00', 1 ),
( 1, 1003, '2020-01-02 14:00:00', 1 ),
( 2, 2001, '2020-01-01 10:00:00', 1 ),
( 2, 2002, '2020-01-07 11:00:00', 0 ),
( 2, 2003, '2020-01-08 14:00:00', 0 ),
( 2, 2004, '2020-01-11 14:00:00', 1 );
发布于 2020-09-10 03:44:23
我不知道你所说的“分组”是什么意思。但是,您对分组的描述是给定值上或之后的1
值的数量。因此,这将为每个visitor
分配一个值。
select td.*,
sum(case when purchase = 1 then 1 else 0 end) over (partition by visitor order by visit_time desc) as grouping
from #tmp_data td;
这可以简化为:
select td.*,
sum( convert(int, purchase) ) over (partition by visitor order by visit_time desc) as grouping
from tmp_data td
order by visitor, visit_time;
注意:这只是分配一个“分组”。在此之后,您可以根据自己的需要进行聚合。
这里是db<>fiddle。
https://stackoverflow.com/questions/63828952
复制相似问题