我正在尝试生成一个查询,该查询显示一个列,该列为每组数据集递增(计数)。结果的总体顺序并不重要,但出现次数必须按日期计数(最旧 = 1)并且应针对每组分组数据进行重置。下面是一个示例表 ProductInteractions。
+---------+------------+----------------+------------+
| User ID | Product ID | Date Purchased | Occurrence |
+---------+------------+----------------+------------+
| user15 | b1290 | 1/1/2012 | 1 |
| user15 | b1290 | 1/15/2013 | 2 |
| user15 | b1290 | 3/15/2019 | 3 |
| user15 | a7983 | 7/22/2017 | 1 |
| user2 | a7983 | 12/3/2015 | 1 |
| user2 | a7983 | 5/6/2016 | 2 |
| user3 | a7983 | 3/24/2017 | 1 |
+---------+------------+----------------+------------+
Run Code Online (Sandbox Code Playgroud)
原始数据:
+---------+------------+-----------+
| User ID | Product ID | Date |
+---------+------------+-----------+
| user15 | b1290 | 1/1/2012 |
| user2 | a7983 | 5/6/2016 |
| user15 | b1290 | 3/15/2019 |
| user15 | a7983 | 7/22/2017 |
| user2 | a7983 | 12/3/2015 |
| user15 | b1290 | 1/15/2013 |
| user3 | a7983 | 3/24/2017 |
+---------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的示例中,user15 和产品 b1290 有 3 次交互。重要的是,第一次发生与初始交互日期相关,并且后续交互按增加的日期进行计数。
我相信查询的基本格式将是:
SELECT [User ID],
[Product ID],
[Date Purchased]
-- Something here utilizing IDENTITY, maybe?
FROM ProductInteractions
GROUP BY [User ID],
[Product ID];
Run Code Online (Sandbox Code Playgroud)
小智 5
使用ROW_NUMBER()
以下是测试/验证脚本的代码:用您自己的表替换 ProductInteractions
declare @ProductInteractions as table([User ID] varchar(50),[Product ID] varchar(50),[Date] datetime)
insert into @ProductInteractions values
('user15' , 'b1290' , '1/1/2012' ),
('user2' , 'a7983' , '5/6/2016' ),
('user15' , 'b1290' , '3/15/2019' ),
('user15' , 'a7983' , '7/22/2017' ),
('user2' , 'a7983' , '12/3/2015' ),
('user15' , 'b1290' , '1/15/2013' ),
('user3' , 'a7983' , '3/24/2017' )
select [User ID],[Product ID],[Date],
row_number() over(partition by [User ID],[Product ID] order by [date]) [occurence]
from @ProductInteractions order by [Product ID] desc
Run Code Online (Sandbox Code Playgroud)