0

時間外計算

以下のように定義された時間外カレンダー。ここでは、WeekNumber は 1 = 月曜日から 5 = 金曜日までです。

CalendarId WeekNumber   StartTime           EndTime         
600         1           1900-01-01 00:00    1900-01-01 08:00    
600         1           1900-01-01 18:00    1900-01-01 23:59    
600         2           1900-01-01 00:00    1900-01-01 08:00    
600         2           1900-01-01 18:00    1900-01-01 23:59    
600         3           1900-01-01 00:00    1900-01-01 08:00    
600         3           1900-01-01 18:00    1900-01-01 23:59    
600         4           1900-01-01 00:00    1900-01-01 08:00    
600         4           1900-01-01 18:00    1900-01-01 23:59    
600         5           1900-01-01 00:00    1900-01-01 08:00    
600         5           1900-01-01 18:00    1900-01-01 23:59    

このカレンダーを events という別のテーブルに適用して、これらの日時に該当するレコードを見つけたいですか?

編集

イベントテーブルの構造は次のとおりです

EventID StartDateTime       TotalTimeInSec  WeekNumber  
1       2009-07-05 07:44     100                1 
2       2009-07-05 08:40     200                1
3       2009-07-05 09:35     150                1
4       2009-07-05 10:37     200                1
5       2009-07-05 19:37     200                1
6       2009-07-05 20:37     200                1

必要な出力は、カレンダーを適用した後に行われます

EventID StartDateTime       TotalTimeInSec  WeekNumber  
1       2009-07-05 07:44     100                1 
5       2009-07-05 19:37     200                1
6       2009-07-05 20:37     200                1
4

3 に答える 3

1
 Select a.WeekNumber,a.startDateTime,b.starttime,b.EndTime
 from tblEvents a,(Select WeekNumber,Starttime,EndTime  from tblMain) b
 where a.startDateTime between b.starttime and b.EndTime
 and a.WeekNumber = b.WeekNumber
于 2012-07-06T09:26:33.547 に答える
0

完全な外部結合があなたが求めているものだとは思いません。そして、他の答えは、時間範囲を日時値として保存する方法を処理していないようです。唯一のトリッキーな部分は、その日付計算を処理しているようです。そのチェックを行うさまざまな方法を見つけることができますが、これが 1 つの解決策だと思います。

SELECT e.*
FROM
    Events as e INNER JOIN Calendar as c
        ON c.WeekNumber = e.WeekNumber
WHERE
    /* CAST(CAST(e.StartDateTime AS TIME) AS DATETIME) -- later versions */
    e.StartDateTime - DATEADD(dd, DATEDIFF(dd, 0, e.StartDateTime), 0)        
        BETWEEN c.StartTime and e.EndTime
于 2012-07-07T22:55:31.383 に答える
0
Select E.*
From tblEvent E
Full outer Join tblMain M on E.WeekNumber = M.WeekNumber
Where E.StartDateTime Between M.StartTime and M.EndTime
于 2012-07-06T09:43:07.510 に答える