Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL向分组数据添加计数器_Sql Server_Tsql - Fatal编程技术网

Sql server T-SQL向分组数据添加计数器

Sql server T-SQL向分组数据添加计数器,sql-server,tsql,Sql Server,Tsql,我试图生成一个查询,该查询显示一列,该列为每组数据集递增(计数)。结果的总体顺序无关紧要,但事件必须按日期(最早=1)计数,并应为每组分组数据重置。下面是一个示例表ProductInteractions +---------+------------+----------------+------------+ | User ID | Product ID | Date Purchased | Occurrence | +---------+------------+--------------

我试图生成一个查询,该查询显示一列,该列为每组数据集递增(计数)。结果的总体顺序无关紧要,但事件必须按日期(最早=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];


对于这一点,一个简单的方法是完美的

SELECT [User ID],
    [Product ID],
    [Date Purchased]
    , ROW_NUMBER() over(partition by [User ID], [Product ID] order by [Date Purchased])
FROM ProductInteractions
GROUP BY [User ID],
        [Product ID];
使用行编号()

下面是测试/验证以下脚本的代码:用自己的表替换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

你知道行号()吗?我不知道,但我现在知道了。谢谢谢谢你的帮助!我得练习一下这个。这对我的日常生活绝对有帮助。这太棒了!谢谢我真的很欣赏截图。