Nie ma potrzeby WHILE
pętla.
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
Również zachowanie status_time
w tabeli jest błędem (chyba że jest to nietrwała, obliczona kolumna). Skutecznie przechowujesz te same dane w dwóch miejscach w bazie danych, co spowoduje niespójności. To samo dotyczy przesłania tych danych do innej tabeli z czasami podzielonymi według typu statusu. Nie twórz nowej tabeli do przechowywania danych, użyj zapytania, aby uzyskać dane, kiedy ich potrzebujesz.