sql-server - T-SQL 将计数器添加到分组数据

标签 sql-server tsql

我正在尝试生成一个查询,该查询显示为每组数据集递增(计数)的列。结果的总体顺序无关紧要,除了出现必须按日期计数(最旧 = 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 |
+---------+------------+----------------+------------+

原始数据:

+---------+------------+-----------+
| 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 |
+---------+------------+-----------+

请注意,在上面的示例中,user15 和产品 b1290 有 3 次交互。重要的是,第一次出现与初始交互日期相关联,后续交互按递增日期计数。

我相信查询的基本格式会是:

    SELECT [User ID],
           [Product ID],
           [Date Purchased]
           -- Something here utilizing IDENTITY, maybe?
      FROM ProductInteractions
     GROUP BY [User ID],
              [Product ID];


最佳答案

使用 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

enter image description here

关于sql-server - T-SQL 将计数器添加到分组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55479890/

相关文章:

sql - 如何找到两个日期之间的持续时间

java - 使用 xp_cmdshell 时无法访问 jarfile

sql - 使用 switch-case 语句更新 T-SQL

sql - 如何查询 SQL Server 2008 数据库的名字和姓氏以及按相关性排序?

带有日期计数器的sql while循环

sql - 如何检查 View 是否存在,如果不存在则创建

sql-server - 无法远程或通过 IP 访问 SQL Server,但可以使用 localhost 或计算机名在本地访问它

sql - 如何列出查询中的列名

sql - 删除重复行

sql - 有效检查记录集中是否存在多行