2013-02-23 67 views
0

我一直試圖圍繞這一段時間來解決這個問題,並且似乎無法找到一個好的解決方案,所以我正在諮詢溢出問題。我有一張看上去有點像這樣的表:SQL的歷史變化

[EmployeeId] [int] IDENTITY(1,1) NOT NULL, 
[Name] [varchar](255) NOT NULL, 
[Title] [varchar](255) NULL, 
[QueueId] [int] NOT NULL, 
[SupervisorId] [int] NULL, 

員工以不同的時間間隔從一個隊列移動到另一個隊列。我應該如何組織我的第二張桌子,這樣我不僅可以看到有多少人在一個特定的時間間隔排隊,而且他們是誰?

回答

0

我想說表看起來就像這樣:

[EmployeeId] [int] IDENTITY(1,1) NOT NULL, 
[QueueId] [int] NOT NULL, 
[Start] [datetime] NOT NULL, 
[End] [datetime] NOT NULL 

可惜的是,你必須回去「結束日期」前面一行。如果我是做這件事的人,我會跳過[End]並在表格頂部創建一個視圖來提供[End]。

的觀點看起來像

SELECT A.[EmployeeId] 
    , A.[QueueId] 
    , A.[Start] 
    , COALESCE(MIN([B.Start]),'9999-12-31') as [END] 
    FROM Table A 
    LEFT OUTER JOIN Table B 
    ON A.[EmployeeId] = B.[EmployeeId] 
    AND A.[Start] < B.[Start] 

如果你這樣做,你可以不加入這一觀點時之間使用的。你必須說> = [開始]和< [結束]。無論如何,這是更安全和更強大,因爲你不必決定日期/時間「舍入」單位。

+0

羅伯特,那是個好主意。但你如何做視圖。我昨晚想到了同樣的事情,但結束日期被留空。 – MrMortales 2013-02-23 17:09:24

+0

更新了答案,因爲我無法在評論中對其進行格式化。 – 2013-02-23 17:19:57

+0

感謝羅伯特,我真的迷失了一段時間,因爲我需要確保我不僅能夠跟蹤代理商目前排隊的位置,而且他們在不同的時間間隔在哪裏,這可以讓我做到這一點。乾杯。 – MrMortales 2013-02-23 17:48:39

0
queueid int 
status varchar(20) 
start datetime 
end datetime 
+1

這是不是錯過了「他們是誰」位? – chrisb 2013-02-23 09:04:00

+0

不是 - 你知道的隊列 – mson 2013-02-24 01:39:20

0

你的第二個表應該有主鍵,日期時間和計數列。但是,您將需要列出隊列中的人員的第三個表,因爲計數&列表位於不同的層次結構級別中。