Ich würde gerne herausfinden, wie viele Stunden ein Mitarbeiter innerhalb und außerhalb des Büros in seinen Dienstzeiten war.Vergleichen Sie zwei verschiedene Tabelle und finden Sie nicht übereinstimmende Zeitstempel
unten ist die Dienstzeiten des Mitarbeiters
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
unterhalb der Anwesenheitsstunden des Mitarbeiters ist (innerhalb Büro-Timings)
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
Wenn Sie über zwei Tabellen vergleichen , die erwarteten inneren und äußeren Zeitvorgaben gegen Dienstzeiten sollten unter:
liegenFromTime 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
Aber ich bin immer Ergebnisse als:
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
Ich hoffe, dass ich meine Frage geklärt und unten ist die Abfrage, die ich für diesen Zweck geschrieben:
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
Was soll ich d bekommen das erwartete Ergebnis?
**
EDIT
**
Below Antwort für den obigen Fall arbeitet und nicht für den folgenden Fall zu arbeiten.
unten ist die
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
Below Stunden des Mitarbeiters Pflicht ist die Anwesenheitsstunden des Mitarbeiters (im Büro Timings)
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
Die innen erwartet und außerhalb der Zeiten sollten die folgenden Zeiten liegen:
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
Aber ich bin immer Ergebnis nach der Anwendung this Antwort:
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
Warum FromTime 2017-12-11 07: 34: 29.000 ToTime 2017-12-11 12: 30: 00.000 ist draußen? Es passt zu den Mitarbeiter Stunden richtig? – Wocugon
Warum ist '(FromTime, ToTime)' = '(2017-12-11 12: 45: 28.000, 2017-12-11 13: 04: 15.000)' im erwarteten Ergebnis aufgeführt. Dieser Zeitraum liegt außerhalb der Dienstzeiten des Arbeitnehmers, nicht wahr? –
@GiorgosBetsos richtig. aber ich dachte an all seine Zeiten, als er im Büro ist. –