SQL查询:如何创建“会话”列

时间:2012-04-30 16:28:51

标签: sql tsql sql-server-2005

我需要找到一种在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       

我需要编写一个查询,添加一个名为“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

这可能吗?

2 个答案:

答案 0 :(得分: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

Working example at SQL Fiddle.

答案 1 :(得分:-1)

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

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

可以使用查询检索访问次数。