Ein WHILE
ist nicht erforderlich Schleife.
SELECT
date,
id,
SUM(CASE WHEN status_id = 1 THEN status_time ELSE 0 END) AS lunch,
SUM(CASE WHEN status_id = 2 THEN status_time ELSE 0 END) AS break,
SUM(CASE WHEN status_id = 3 THEN status_time ELSE 0 END) AS vacation
FROM
My_Table
GROUP BY
date,
id
Außerdem wird die status_time
beibehalten in der Tabelle ist ein Fehler (es sei denn, es handelt sich um eine nicht persistente, berechnete Spalte). Sie speichern dieselben Daten effektiv an zwei Stellen in der Datenbank, was zu Inkonsistenzen führen wird. Dasselbe gilt für das Verschieben dieser Daten in eine andere Tabelle mit Zeiten, die nach Statustyp aufgeschlüsselt sind. Erstellen Sie keine neue Tabelle, um die Daten zu speichern, verwenden Sie die Abfrage, um die Daten abzurufen, wenn Sie sie benötigen.