2012-04-30 135 views
1

我需要找到一種方法在SELECT查詢中添加Session列。我使用的是SQL Server 2005中SQL查詢:如何創建「會話」列

這裏的初始示例數據:

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 

這可能嗎?

回答

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.

+0

哇!我絕對有很多東西要學。這工作。非常感謝你對此的幫助。 – Jefferson

-1

最好避免數據庫中的數據重複。我不知道您是否可以更改數據庫結構,但是如果可以,您應該創建兩個表:

  • 表「用戶」包含會話標識和用戶名(唯一)。
  • 表「訪問」包含訪問ID和用戶ID。

訪問次數可以通過查詢來檢索。

+1

我贊同這條評論,但它不應該是一個問題的運算問題 – Lamak

+0

應該在哪裏有我發佈了這個?發表評論很不舒服。 –