Es gibt ein neues Gesetz, das in einer der Städte, in denen wir tätig sind, in Kraft tritt. Wir müssen mindestens 11 Stunden ab dem Zeitpunkt haben, an dem jemand ausschaltet, bis er einsteigen kann. Wenn die Zeit weniger als 11 Stunden beträgt, müssen wir ihnen für jeden Vorfall einen bestimmten Betrag zahlen.Stunden zwischen Schichten berechnen
Ich bin mit SQL Server 2012
Ich brauche Hilfe bei der Bestimmung, welche, wie viele Stunden pro Person zwischen den Schichten hat. Basierend auf den unten stehenden Aufzeichnungen, würden wir für 11/14 11:28 Uhr -> 11/15 8:56 Uhr (9.28 Uhr) und 11/29 2:32 Uhr -> 11/29 10:11 Uhr (7,39 Stunden)
schuldenCREATE TABLE #Shift(
FKEmployeeNumber int,
DateOfBusiness datetime,
FKStoreId int,
EmployeeShiftNumber int,
FKJobCodeId int,
InHour int,
InMinute int,
OutHour int,
OutMinute int)
insert into #Shift (FKEmployeeNumber, DateOfBusiness, FKStoreId, EmployeeShiftNumber, FKJobCodeId, InHour, InMinute,OutHour,OutMinute)
values
(529251, '11/13/2017', 3013, 0, 1, 8, 1, 16, 24),
(529251, '11/14/2017', 3013, 0, 1, 15, 21, 23, 28),
(529251, '11/15/2017', 3013, 0, 1, 8, 56, 15, 58),
(529251, '11/16/2017', 3013, 0, 1, 14, 59, 20, 54),
(529251, '11/19/2017', 3013, 0, 1, 12, 40, 19, 42),
(529251, '11/20/2017', 3013, 1, 1, 8, 28, 23, 47),
(529251, '11/21/2017', 3013, 0, 1, 15, 31, 23, 30),
(529251, '11/25/2017', 3013, 0, 1, 10, 26, 18, 13),
(529251, '11/27/2017', 3013, 0, 1, 9, 58, 18, 27),
(529251, '11/28/2017', 3013, 0, 1, 14, 59, 2, 32),
(529251, '11/29/2017', 3013, 0, 1, 10, 11, 17, 13),
(529251, '11/29/2017', 3013, 1, 1, 17, 16, 17, 25),
(529251, '11/30/2017', 3013, 0, 1, 15,4, 20, 0),
(529251, '11/30/2017', 3013, 1, 1, 20, 0, 23, 18),
(529251, '11/30/2017', 3013, 2, 1, 23, 18, 23, 22),
(529251, '12/01/2017', 3013, 0, 1, 12, 12, 16, 0)
Select
sh.dateofbusiness,sh.fkstoreid,sh.employeeshiftnumber,sh.fkemployeenumber, sh.fkjobcodeid,sh.inHour,sh.InMinute,sh.OutHour,sh.OutMinute
from #shift sh where sh.dateofbusiness > '11/12/2017' and sh.fkemployeenumber = 529251
order by sh.FKEmployeeNumber, sh.DateOfBusiness
Sie haben fälschlicherweise Zeit als separate Integer-Felder für jeden timepart gespeichert. Das wird kein Spaß sein. Ich würde vorschlagen, um zu beginnen, dass Sie jene Sachen zurück in einen korrekten timestamp Datentyp umwandeln, also können Sie gerade einen Satz vom folgenden abziehen, 'LAG (yourtimestamp) OVER (PARTITION DURCH FKEmployeeNumber ORDER BY DateOfBusiness DESC)' zu verwenden, um das vorherige zu erhalten Zeit-Eintrag Details für Ihre aktuelle Aufzeichnung, sonst werden Sie in eine Welt der Verletzung. – JNevill
Wir erhalten die Daten von unserem POS-Anbieter zu uns repliziert. Die Stunden und Minuten sind in getrennten Spalten, also habe ich keine Kontrolle darüber. – user3446684
Ist POS für Stück Sh ** kurz? ;) Ich denke jedoch, dass die wirkliche Frage hier ist, wie man die In und Out Zeit richtig in einen richtigen Zeitstempel umwandelt, dann kannst du LAG() benutzen, um deine vorherige Zeit zu erhalten und subtrahieren . Konvertiere, subtrahiere mit Lag() und du bist golden. – JNevill