【发布时间】:2021-01-13 18:58:45
【问题描述】:
对于上述数据,我想根据对行的分组计算每个购买行(purchase = 1)的百分比值。
计算条件为:
- 前几行的visit_time应在购买visit_time的7天内。
- 仅应在计算中考虑具有相同访客 ID 的行。
例如,百分比值应计算如下:
- 第 2 行 Percent_val = 第 1 行的 val x 第 2 行的 val = 0.23 x 0.97 = 0.2231
- 第 3 行 Percent_val = 第 1 行的 val x 第 2 行的 val x 第 3 行的 val = 0.23 x 0.97 x 0.55 = 0.122705
- 第 4 行 Percent_val = 第 4 行的 val = 0.11
- 第 7 行 Percent_val = 第 5 行的 val x 第 6 行的 val x 第 7 行的 val = 0.57 x 0.16 x 0.38 = 0.034656(第 4 行将不被考虑,因为它的 visit_time 不在购买行的 7 天范围内,即行7)
我使用的是 SQL Server 2012。
预期的结果将类似于以下:
如何在这里得到预期的结果?
生成测试数据的脚本:
CREATE TABLE [#tmp_data]
(
[visitor] INT,
[visit_id] INT,
[visit_time] DATETIME,
[val] numeric(4,2),
[purchase] BIT
);
INSERT INTO #tmp_data( visitor, visit_id, visit_time,val, purchase )
VALUES( 1, 1001, '2020-01-01 10:00:00', 0.23,0 ),
( 1, 1002, '2020-01-02 11:00:00', 0.97,1 ),
( 1, 1003, '2020-01-02 14:00:00', 0.55, 1 ),
( 2, 2001, '2020-01-01 10:00:00', 0.11, 1 ),
( 2, 2002, '2020-01-07 11:00:00', 0.57, 0 ),
( 2, 2003, '2020-01-08 14:00:00', 0.16, 0 ),
( 2, 2004, '2020-01-11 14:00:00', 0.38, 1 );
【问题讨论】:
标签: sql sql-server tsql datetime sql-server-2012