1

我需要找到一种在查询中添加Session列的方法。SELECT我正在使用 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       

我需要编写一个查询,该查询将添加一个名为“会话”的列,然后在每次名称更改时递增,并且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

这可能吗?

4

2 回答 2

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

SQL Fiddle 的工作示例。

于 2012-04-30T16:52:24.473 回答
-1

最好避免数据库中的数据重复。我不知道您是否可以更改数据库结构,但如果可以,您应该创建两个表:

  • 表“用户”包含会话 ID 和用户名(唯一)。
  • 表“访问”包含访问 ID 和用户 ID。

可以通过查询检索访问次数。

于 2012-04-30T16:46:37.613 回答