2011-07-13 18 views
2

如果有人能幫助我製作這個SQL語句,我將不勝感激。讓我先說我是一個SQL noob。所以,從我的胸部開始:)現在的問題。對於日期範圍的此SQL Server select語句的任何幫助?

我有成千上萬的條目,有兩個日期/時間字段的數據庫,我們姑且稱之爲In和Out:

In          Out 
2011-06-16 13:45:11.000 2011-06-16 13:49:12.000 
2011-06-16 13:51:31.000 2011-06-16 14:23:17.000 
2011-06-16 14:51:54.000 2011-06-16 14:58:43.000 

等等...

在輸入我有一個時間範圍(timeIn和timeOut)。在輸出中,我需要知道落入該時間範圍的每條記錄中「入」和「出」時間之間的累積秒數。它很容易與此daigram來說明:

http://i150.photobucket.com/albums/s99/dc2000_bucket/sql_graph.jpg

從圖中以名字,我需要知道「的時間間隔1(秒)」 +「時間間隔2(秒)」 +「時間間隔3(以秒爲單位)「。任何想法如何撰寫這樣的SQL語句?

回答

2
select sum(datediff(second, [In], case when @TimeOut < [Out] 
            then @TimeOut 
            else [Out] 
            end)) 
from YourTable 
where [In] between @TimeIn and @TimeOut 

或者這樣,如果你想以包括以@TimeIn - @TimeOut結尾的時間間隔。

select sum(datediff(second, case when @TimeIn < [In] 
           then [In] 
           else @TimeIn 
          end, 
          case when @TimeOut < [Out] 
           then @TimeOut 
           else [Out] 
          end)) 
from YourTable 
where [In] <= @TimeOut and 
     [Out] >= @TimeIn 
1

在SQL-Server中沒有GREATEST()LEAST()功能,或者它會像這樣:

SELECT LEAST(t.timeOut, @TimeOut) - GREATEST(t.timeIn,@TimeIn) 
FROM tableX AS t 
WHERE t.timeIn <= @TimeOut 
    AND @TimeIn <= t.timeOut 

使用CASE

SELECT DATEDIFF(second 
       , CASE WHEN t.timeIn <= @TimeIn 
         THEN @TimeIn 
         ELSE t.timeIn 
       END 
       , CASE WHEN t.timeOut <= @TimeOut 
         THEN t.timeOut 
         ELSE @TimeOut 
       END 
       ) 
     AS TimeInterval 
FROM tableX AS t 
WHERE t.timeIn <= @TimeOut 
    AND @TimeIn <= t.timeOut 
ORDER BY t.timeIn 
+0

謝謝。你的方法也行得通,但我不能把這個綠色的複選標記放在兩個答案中。 – ahmd0