Ich versuche eine einfache Abfrage für Arbeitszeiten zu erstellen, wenn Mitarbeiter ein- und auschecken. Die Datenbank zeichnet den Namen der Person auf, wenn sie ein- oder aussteigt und die Uhrzeit angibt. Es zeichnet mehr als das auf, aber ich brauche diese Information nicht.Einreihige Unterabfrage gibt mehr als eine Zeile in Oracle zurück
So wäre ein Beispiel DB sein:
Id | User | In_out | Date_Time
----------------------------------
2 | Bob | In | 13/Oct/16 9:30:35AM
3 | Ken | In | 13/Oct/16 9:34:27AM
4 | Jon | In | 13/Oct/16 9:34:46AM
5 | Billy | In | 13/Oct/16 9:52:06AM
6 | Bob | Out | 13/Oct/16 4:30:05PM
7 | Jon | Out | 13/Oct/16 4:32:55PM
Das Ergebnis, das ich wieder in einer SQL bringen wollen ist:
User | Time_In | Time_Out
-------------------------------
Bob | 9:30:35AM | 4:30:05PM
Jon | 9:34:46AM | 4:32:55PM
Die SQL ich versuche ist nicht richtig, das weiß ich. Aber was muss ich ändern, um das gewünschte Ergebnis zu erhalten?
SELECT
Clock.Checkin_Checkout.User,
Clock.Checkin_Checkout.In_Out,
(SELECT TO_CHAR(Clock.Checkin_Checkout.DATETIME, 'hh:mi:ss AM')
FROM Clock.Checkin_Checkout
WHERE Clock.Checkin_Checkout.In_Out = 'In') AS "Time In",
To_Char(Clock.Checkin_Checkout.Create_Datetime, 'hh:mi:ss AM') AS "Time Out"
FROM
Clock.Checkin_Checkout
WHERE
Clock.Checkin_Checkout.In_Out = 'Out'
AND Clock.Checkin_Checkout.Datetime >= '13/Oct/2016'
Dies ist kein einfaches Problem, es sei denn, Sie können die Datenintegrität garantieren. Wie bist du sicher, dass jedes "in" genau ein "out" hat und umgekehrt? –
Versuchen Sie, analytische Funktionen zu verwenden. Ich glaube, es ist der beste Weg. – 0xdb