2011-10-04 24 views
0

,我有以下數據:T-SQL循環過程

ID  Date     interval interval_date   tot_activity non-activity 
22190 2011-09-27 00:00:00  1000 2011-09-27 10:00:00.000  265   15 

我有另一個表,這樣的數據:現在

Date      ID    Start    END    sched_non_activity  non_activity 
10/3/2011 12:00:00 AM HBLV-22267 10/3/2011 2:02:00 PM 10/3/2011 2:11:00 PM 540   

,在第二個表的non_activity領域,我想這成爲第一張表中的值。但是,我需要捕獲tot_activity - non_activity,其中第一個表的間隔(以15 min爲增量)與第二個表的開始和結束位於同一時間範圍內。

我已經嘗試設置變量,並設置一個循環,其中每一行按時間間隔驗證啓動時間,但我不知道如何只返回一個記錄的變量,因爲我不斷收到錯誤,我的變量變得太許多結果。

我已經試過尋找無處不在的教程,我找不到任何東西來幫助我。任何人有任何循環的指針或教程,他們可以分享?

+0

你能更詳細地解釋這個問題嗎? 「我需要捕捉」是什麼意思?我知道您希望第二個表中的non_activity接受第一個表中的非活動字段的值,但您還需要捕獲哪些內容? –

+0

在第一個表中,間隔15分鐘。所以15:00,15:15,15:30等等。在第二個表中,它的開始和結束時間都是正常的hh:mm:ss。我需要用第一個表tot_activity - non_activity來檢查第二個表的sched_non_activity,其中第二個表的間隔和時間匹配。所以如果第二張桌子的開始時間是15:55,我需要包括15:45的table1的時間間隔。希望這已經足夠明確:) – Jessica

+0

我認爲你應該發佈你所嘗試過的。即使你的嘗試導致錯誤,他們可能會幫助你更好地理解你的意圖。另一件可能有用的事情是數據樣本伴隨着樣本產生的預期結果。你的問題似乎是一個棘手的問題,而口頭描述本身似乎不足以理解它。 –

回答

2

您需要以某種方式生成間隔結束日期;我假設第一張表中總是有一個記錄,記錄間隔爲15分鐘。在這種情況下,示例如下所示:

;WITH Intervals 
AS 
(SELECT 
    Interval_date 
    ,DATEADD(ms,840997,Interval_date) AS interval_end 
    ,nonactivity 
FROM A) 

--Select query for Validation 
--SELECT 
-- b.[Date] 
-- ,b.ID 
-- ,b.Start 
-- ,b.sched_non_activity 
-- ,i.nonactivity 
--FROM B 
--JOIN Intervals AS i 
--ON b.Start >= i.Interval_date 
--AND b.[END] <= i.interval_end 

UPDATE B 
    SET non_activity = i.nonactivity 
FROM B 
JOIN Intervals AS i 
ON b.Start >= i.Interval_date 
AND b.[END] <= i.interval_end 

很明顯,您可能需要根據具體情況對其進行調整。