従業員が勤務時間内に社内外に何時間いるか調べたいと思います。以下は2つの異なるテーブルを比較して、不一致のタイムスタンプを確認してください
2つのテーブルの上に比較すると
CASE以下#1
FromDateTime ToDateTime
---------------------------------------------------
2017-12-11 07:30:00.000 2017-12-11 12:30:00.000
2017-12-11 15:30:00.000 2017-12-11 18:30:00.000
は(オフィスタイミング内部の)従業員の出席時間
InTime OutTime
--------------------------------------------------------
2017-12-11 07:30:12.000 2017-12-11 07:34:29.000
2017-12-11 12:45:28.000 2017-12-11 13:04:15.000
2017-12-11 17:55:15.000 2017-12-11 18:04:28.000
である従業員のデューティ時間です勤務時間に対する期待される内外のタイミングは、以下のとおりです。
FromTime ToTime Remarks
-----------------------------------------------------------------------
2017-12-11 07:30:12.000 2017-12-11 07:34:29.000 Inside Office
2017-12-11 07:34:29.000 2017-12-11 12:30:00.000 Outside Office
2017-12-11 12:45:28.000 2017-12-11 13:04:15.000 Inside Office
2017-12-11 15:30:00.000 2017-12-11 17:55:15.000 Outside Office
2017-12-11 17:55:15.000 2017-12-11 18:04:28.000 Inside Office
2017-12-11 18:04:28.000 2017-12-11 18:30:00.000 Outside Office
しかし、私は結果を取得しています:
DECLARE @EmployeeDutyHours TABLE
(
FromDateTime DATETIME,
ToDateTime DATETIME
)
DECLARE @EmployeeAttendanceHours TABLE
(
InTime DATETIME,
OutTime DATETIME
)
INSERT INTO @EmployeeDutyHours
VALUES ('2017-11-29 07:30:00.000', '2017-11-29 12:30:00.000'),
('2017-11-29 13:30:00.000', '2017-11-29 16:30:00.000')
INSERT INTO @EmployeeAttendanceHours
VALUES ('2017-11-29 07:27:24.000', '2017-11-29 09:44:33.000'),
('2017-11-29 11:57:37.000', '2017-11-29 12:05:39.000'),
('2017-11-29 15:12:31.000', '2017-11-29 17:24:32.000')
SELECT
FromTime = eah.InTime,
ToTime = eah.OutTime,
Message = 'Inside Office'
FROM @EmployeeAttendanceHours eah
UNION
SELECT
FromTime = eah.OutTime,
ToTime = eh.ToDateTime,
Message = 'Outside Office'
FROM @EmployeeDutyHours eh,@EmployeeAttendanceHours eah
WHERE eah.OutTime BETWEEN eh.FromDateTime AND eh.ToDateTime
UNION
SELECT
FromTime = eh.FromDateTime,
ToTime = eah.InTime,
Message = 'Outside Office'
FROM @EmployeeDutyHours eh, @EmployeeAttendanceHours eah
WHERE eah.InTime BETWEEN eh.FromDateTime AND eh.ToDateTime
ORDER BY 1, 2
を私はDを取得する必要があります何を:私は私の質問をクリアし、下記の私は、この目的のために書いたクエリであると思います
FromTime ToTime Remarks
-----------------------------------------------------------------------
2017-12-11 07:30:00.000 2017-12-11 07:30:12.000 Outside Office
2017-12-11 07:30:12.000 2017-12-11 07:34:29.000 Inside Office
2017-12-11 07:34:29.000 2017-12-11 12:45:28.000 Outside Office
2017-12-11 12:45:28.000 2017-12-11 13:04:15.000 Inside Office
2017-12-11 15:30:00.000 2017-12-11 17:55:15.000 Outside Office
2017-12-11 17:55:15.000 2017-12-11 18:04:28.000 Inside Office
2017-12-11 18:04:28.000 NULL Outside Office
期待される結果は?
**
EDIT
**
Below答えは、上記のケースのために働いて、以下の場合のために働いていません。
以下は、従業員のデューティ時間である
CASE以下第2位
FromDateTime ToDateTime
---------------------------------------------------
2017-11-29 07:30:00.000 2017-11-29 12:30:00.000
2017-11-29 13:30:00.000 2017-11-29 16:30:00.000
は(オフィスタイミング内部の)従業員の出席時間
InTime OutTime
--------------------------------------------------------
2017-11-29 07:27:24.000 2017-11-29 09:44:33.000
2017-11-29 11:57:37.000 2017-11-29 12:05:39.000
2017-11-29 15:12:31.000 2017-11-29 17:24:32.000
期待の内側で、勤務時間外のタイミングは以下のようになります。
FromTime ToTime Remarks
-----------------------------------------------------------------------
2017-11-29 07:27:24.000 2017-11-29 09:44:33.000 Inside Office
2017-11-29 09:44:33.000 2017-11-29 11:57:37.000 Outside Office
2017-11-29 11:57:37.000 2017-11-29 12:05:39.000 Inside Office
2017-11-29 12:05:39.000 2017-11-29 12:30:00.000 Outside Office
2017-11-29 13:30:00.000 2017-11-29 15:12:31.000 Outside Office
2017-11-29 15:12:31.000 2017-11-29 17:24:32.000 Inside Office
しかし、私はthis答えを適用した後、結果を取得しています:
FromTime ToTime Remarks
-----------------------------------------------------------------------
2017-11-29 07:27:24.000 2017-11-29 09:44:33.000 Inside Office
2017-11-29 07:30:00.000 2017-11-29 11:57:37.000 Outside Office
2017-11-29 09:44:33.000 2017-11-29 12:30:00.000 Outside Office
2017-11-29 11:57:37.000 2017-11-29 12:05:39.000 Inside Office
2017-11-29 12:05:39.000 2017-11-29 12:30:00.000 Outside Office
2017-11-29 13:30:00.000 2017-11-29 15:12:31.000 Outside Office
2017-11-29 15:12:31.000 2017-11-29 17:24:32.000 Inside Office
なぜFromTime 2017-12-11 07:34:29.000 ToTime 2017-12-11 12:30:00.000が外にありますか?それは従業員時間に合っていますか? – Wocugon
'(FromTime、ToTime)' =(2017-12-11 12:45:28.000、2017-12-11 13:04:15.000)が期待される結果にリストされているのはなぜですか?この期間は従業員の勤務時間外です。 –
@GiorgosBetsosが正しい。しかし、私は彼が社内にいるときの彼のすべてのタイミングを考えました。 –