2016-07-05 12 views
0

Ich habe Daten von 3 Maschinen für die Herstellung ausgegeben. Die Ausgabe sieht wie folgt aus:Overnight Shift

ID  MachineId ProgramNo    StartTime  StopTime  Cycle Idle 
327628 3   W5_2020_OPP2.MPF  12/15/15 23:29 12/15/15 23:29 0:00:00 0:00:04 
327629 3   W5_2020_OPP2.MPF  12/15/15 23:30 12/15/15 23:39 0:09:25 0:01:02 
327632 1   880995_610_DN_BOTH.MPF 12/15/15 23:40 12/16/15 0:37 0:56:40 0:10:31 
327633 3   W5_2020_OPP2.MPF  12/15/15 23:40 12/15/15 23:40 0:00:08 0:37:35 
327634 2   3620_06_OPP1.MPF  12/15/15 23:58 12/16/15 0:07 0:09:08 0:04:38 
327635 2   3620_06_OPP1.MPF  12/16/15 0:11 12/16/15 0:14 0:02:32 0:03:05 
327636 2   3620_06_OPP1.MPF  12/16/15 0:17 12/16/15 0:34 0:17:08 0:00:41 
327637 3   W5_2020_OPP2.MPF  12/16/15 0:18 12/16/15 0:18 0:00:00 0:00:00 
327638 3   W5_2020_OPP2.MPF  12/16/15 0:18 12/16/15 0:33 0:15:41 0:02:42 
327639 2   3620_06_OPP1.MPF  12/16/15 0:35 12/16/15 0:52 0:16:47 0:09:26 
327640 3   W5_2020_OPP2.MPF  12/16/15 0:36 12/16/15 0:36 0:00:00 0:00:06 
327641 3   W5_2020_OPP2.MPF  12/16/15 0:36 12/16/15 0:52 0:15:40 0:27:57 
327645 1   880995_610_DN_BOTH.MPF 12/16/15 0:47 12/16/15 1:44 0:56:42 0:02:03 

Wir haben 2 Schichten, die diese Maschinen laufen, von 6.00 Uhr bis 16.00 Uhr und 16.30 Uhr bis 02.30 Uhr. Ich muss die Zykluszeit für jede Schicht zusammenfassen, die auf der Programmnummer und Maschinennummer gruppiert ist. Ich kann Schicht 1 ganz leicht erreichen, ist die Nachtschicht, mit der ich Probleme habe. Ich habe darüber nachgedacht, die zweite Schicht vor Mitternacht und nach Mitternacht in zwei Gruppen aufzuteilen, aber es gibt Fälle, in denen das Programm kurz vor Mitternacht beginnt und kurz danach endet. Oder wäre es einfacher, die Differenz zwischen Start- und Stoppzeit zu summieren, ohne den Spaltenzyklus zu verwenden? Hat jemand irgendwelche Vorschläge? Vielen Dank im Voraus.

EDIT

ich nicht versucht haben, noch die Gesamt zu tun, haben zuerst die Datensätze nur auf der Suche nach in erster Linie konzentriert. Ich war auch nicht so besorgt, direkt um 2 Uhr morgens anzuhalten, nur so lange, wie es vor 6 Uhr der ersten Schicht war.

SELECT 
    * 
FROM 
    Cycle 
WHERE 
    CONVERT(VARCHAR(10), StartTime, 108) >= '16:30:00' 
    AND 
    CONVERT(VARCHAR(10), DATEADD(DD, 1, StartTime), 108) < '06:00:00' 
+0

Welche Sprache verwenden Sie dafür? Was hast du bisher versucht? – Taegost

+0

T-SQL in SQL R2 2008. Ich habe nicht versucht, die Summe noch zu machen, in erster Linie habe ich mich darauf konzentriert, die Datensätze zuerst zu finden. Ich war auch nicht so besorgt, direkt um 2 Uhr morgens anzuhalten, nur so lange, wie es vor 6 Uhr der ersten Schicht war. SELECT * FROM Zyklus WHERE CONVERT (VARCHAR (10), StartTime, 108)> = '16: 30: 00' und CONVERT (VARCHAR (10), DATEADD (DD, 1, StartTime), 108) <'06: 00 : 00 ' – volleygirl029

+0

Diese Information muss in der ursprünglichen Frage sein ... – Taegost

Antwort

0

Basierend auf Ihren Bedürfnissen und TSQL unter der Annahme, nur die Daten von 3 Stunden gesichert werden, so dass Sie nicht mit dem Crossover zu tun haben. Dann können Sie einen BETWEEN für 3 bis 13 Uhr und 13:30 bis 23:30 Uhr nutzen, um Ihre Gruppen zu bekommen.

SELECT ProgramNo, MachineId, DATEADD(HOUR, -3, StartTime) AS StartTime, DATEADD(HOUR, -3, StopTime) AS StopTime, Cycle, Idle 
FROM {tableName} 

EDIT: Bei der Abfrage vor kurzem Kommentare oben OP hinzugefügt, meine schnelle und schmutzige Lösung wäre so etwas wie dieses:

SELECT ProgramNo, MachineId, 
    SUM(CASE WHEN CONVERT(VARCHAR, StartTime, 108) BETWEEN '3:00:00' AND '13:00:00' THEN Cycle ELSE 00:00:00 END) AS Shift1Cycle, 
    SUM(CASE WHEN CONVERT(VARCHAR, StartTime, 108) BETWEEN '13:30:00' AND '23:30:00' THEN Cycle ELSE 00:00:00 END) AS Shift2Cycle, 
FROM 
(
    SELECT ProgramNo, MachineId, DATEADD(HOUR, -3, StartTime) AS StartTime, DATEADD(HOUR, -3, StopTime) AS StopTime, Cycle, Idle 
    FROM Cycle 
) a 
GROUP BY ProgramNo, MachineId 

Offensichtlich gibt es werde einige Grenzfälle sein, wie erwähnt in den Kommentaren, aber diese kümmern sich um den einfachen Anwendungsfall. Die Summe sollte die resultierenden Stunden, Minuten und Sekunden des Zyklus mit einem Datum vom 01.01.1900 sein.

+0

was passiert, wenn sie eine Schicht um 1 Uhr morgens aus Notgründen starten? :) – objectNotFound