我正在使用一個名爲CELCAT的時間表應用程序,試圖抽出一些關於學生應該被標記爲報告的數據...這似乎是非常困難的,因爲這樣添加和學生登記的結構去除見下文: sql轉向添加日期範圍和刪除日期範圍
studentid eventid fromdatetime addition removal
25149 25145 2009-09-12 10:30:00.000 Y NULL
25149 25145 2009-09-12 10:30:00.000 NULL Y
25149 25145 2009-09-12 10:30:00.000 Y NULL
25150 23013 2009-09-08 09:00:00.000 Y NULL
25150 23554 2009-09-07 09:00:00.000 Y NULL
25150 25145 2009-09-12 10:30:00.000 Y NULL
25150 25145 2009-07-27 00:00:00.000 NULL Y
25150 25145 2009-09-12 10:30:00.000 Y NULL
25150 25145 2009-09-12 10:30:00.000 NULL Y
25150 25145 2009-09-12 10:30:00.000 Y NULL
25150 25148 2009-09-12 15:00:00.000 Y NULL
25151 25145 2009-09-12 10:30:00.000 Y NULL
25151 25145 2009-10-10 00:00:00.000 NULL Y
25152 25145 2009-09-19 10:30:00.000 Y NULL
25152 25145 2009-07-27 00:00:00.000 NULL Y
因此,一個除了學生的手段,他們應該從該日起在寄存器中被標記(寄存器是用自己的周輪廓每週reccurring事件,但我可以處理它的那一面)。刪除將意味着學生不需要在此日期之後被標記,但是可能會在稍後的一週內添加,刪除並重新添加學生。
我想會得到我在正確的方向將是讓結構
studentid eventid fromdate todate
25149 25145 2009-09-12 10:30:00.000 2009-09-28 10:30:00.000
25149 25145 2009-10-13 10:30:00.000 2009-10-24 10:30:00.000
任何想法如何做到這一點的桌子嗎?還是更好的建議?我想它會涉及一些遊標的使用,除非有人有一個很棒的解決方案。這些表格由CELCAT設計,不能修改。
哦,是它的SQL Server 2005的
通過KM編輯,這裏是一些代碼來測試的解決方案:
DECLARE @YourTable table (studentid int
,eventid int
,fromdatetime datetime
,addition char(1)
,removal char(1)
)
SET NOCOUNT ON
INSERT INTO @YourTable VALUES (25149,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25149,25145,'2009-09-12 10:30:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25149,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,23013,'2009-09-08 09:00:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,23554,'2009-09-07 09:00:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25145,'2009-07-27 00:00:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25150,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25150,25148,'2009-09-12 15:00:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25151,25145,'2009-09-12 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25151,25145,'2009-10-10 00:00:00.000', NULL,'Y')
INSERT INTO @YourTable VALUES (25152,25145,'2009-09-19 10:30:00.000','Y' ,NULL)
INSERT INTO @YourTable VALUES (25152,25145,'2009-07-27 00:00:00.000', NULL,'Y')
SET NOCOUNT OFF
如何從給定的樣本數據中獲取這兩個日期範圍行?當您想要的「答案」與給定的樣本數據不匹配時,很難爲您做出查詢。 – 2009-10-01 17:44:22
此表/視圖中是否有另一列表示添加記錄時的時間戳或至少是增量標識符?如果不是這樣,那麼爲ID = 25149的學生設置一個邏輯是相當困難的,因爲他被添加到同一個事件或從同一個事件中移除了3次,但是不清楚先做了什麼。 – van 2009-10-02 15:33:20
如果你指出你希望得到什麼樣的「最終」結果,而不僅僅是「......正確的方向......」,它也會有所幫助。謝謝 – van 2009-10-02 16:10:07