Ich muss Datensätze finden, die seit dem letzten Schichtbeginn geändert wurden. Verschiebungen beginnen um 07: 00h (morgens), 15: 00h (nachmittags) und 23: 00h (nachts).SQL Server den nächsten Schichtbeginn (Zeit) zu einem Datum finden
Zum Beispiel. Es ist jetzt 17: 15h, also bin ich in der Nachmittagsschicht. Jetzt möchte ich arbeitsbezogene Datensätze finden, die seit Beginn meiner vorherigen Schicht geändert wurden. Also brauche ich eine Startzeit von 15:00 am Vortag. Das ist seit 24 Stunden + die Zeit in der aktuellen Schicht.
Ich brauche eine Lösung, die ich als Teil einer Where-Klausel implementieren kann.
Grundsätzlich versuche ich den letzten Beginn einer Schicht zu finden (7, 15 oder 23h) und subtrahiere dann weitere 24 Stunden von diesem Datum. Und lassen Sie die Abfrage bis zur aktuellen Zeit laufen.
select * from workorder
where changedate >= getDate() - 24h - time_in_shift
oder
select * from workorder
where changedate >= last_shift_start - 24h
Um ehrlich zu sein, ich habe nicht eine gute Strategie noch nicht gefunden. Zuerst habe ich versucht, die richtige Verschiebung mit einer Case-Anweisung zu finden und diese für die korrekte Berechnung zu verwenden. Aber ich denke nicht, dass dies der beste Weg ist.
select getDate() as now,
case
when datepart(hh, getDate())-23 >= 0 then 'night'
when datepart(hh, getDate())-15 >= 0 then 'afternoon'
when datepart(hh, getDate())-7 >= 0 then 'morning'
else 'night'
end as shift;
Hier einige Beispieldaten
id changedate
1 '2017-04-20 01:00:00'
2 '2017-04-20 02:00:00'
3 '2017-04-20 08:00:00'
4 '2017-04-20 09:00:00'
5 '2017-04-20 14:00:00'
6 '2017-04-20 16:00:00'
7 '2017-04-20 17:00:00'
8 '2017-04-20 22:00:00'
9 '2017-04-20 23:00:00'
10 '2017-04-20 23:30:00'
11 '2017-04-21 01:10:00'
12 '2017-04-21 02:10:00'
13 '2017-04-21 08:10:00'
14 '2017-04-21 10:10:00'
15 '2017-04-21 16:10:00'
16 '2017-04-21 16:20:00'
Können sagen, es 2017.04.21 17.00.00 jetzt ist. Ich bin also in der Nachmittagsschicht. Das bedeutet, ich möchte alle Datensätze, die seit meinem vorherigen Start geändert wurden. Also seit 2017-04-20 15:00:00. Das sind alle Datensätze mit Ausnahme der ersten 5.
erläutert bitte einige Beispieldaten und die erwartete Ausgabe. –
planen Sie, die Startzeit der Schicht zu programmieren und 24 Stunden zurückzuschauen? –
ja, es ist für eine konfigurierbare Ergebnisabfrage, so ziemlich zugänglich und wahrscheinlich sowieso nicht zu ändern – Jeroen