SQL查询:如何创建"会话"列

Jef*_*son 1 sql t-sql sql-server-2005

我需要找到一种SessionSELECT查询中添加列的方法.我正在使用SQL Server 2005.

这是最初的示例数据:

ID    Name      VisitCounter    
1     TOM           1   
2     TOM           2   
3     TOM           3   
4     DICK          1       
5     DICK          2       
6     DICK          3       
7     DICK          4       
8     HARRY         1       
9     HARRY         2       
10    TOM           1   
11    TOM           2   
12    DICK          1       
13    DICK          2       
Run Code Online (Sandbox Code Playgroud)

我需要编写一个查询,它将添加一个名为"Session"的列,然后每次名称更改时都会递增visitcounter = 1.

所以查询应该导致:

ID    Name      VisitCounter    Session
1     TOM           1               1
2     TOM           2               1
3     TOM           3               1
4     DICK          1               2
5     DICK          2               2
6     DICK          3               2
7     DICK          4               2
8     HARRY         1               3
9     HARRY         2               3
10    TOM           1               4
11    TOM           2               4
12    DICK          1               5
13    DICK          2               5 and so on
Run Code Online (Sandbox Code Playgroud)

这可能吗?

And*_*mar 5

在示例数据中,会话不会重叠.如果这一般是正确的,您可以计算以前启动的会话数:

select  yt.ID
,       yt.Name
,       yt.VisitCounter
,       count(prev.ID) as Session
from    YourTable yt
join    YourTable prev
on      prev.ID <= yt.ID and
        prev.VisitCounter = 1
group by
        yt.ID
,       yt.Name
,       yt.VisitCounter
order by 
        yt.ID
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle的工作示例.