Няма нужда от WHILE
цикъл.
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
Освен това запазване на status_time
в таблицата е грешка (освен ако не е непостоянна, изчисляема колона). Вие ефективно съхранявате едни и същи данни на две места в базата данни, което в крайна сметка ще доведе до несъответствия. Същото важи и за натискането на тези данни в друга таблица с времена, разбити по тип състояние. Не създавайте нова таблица, за да съхранявате данните, използвайте заявката, за да получите данните, когато имате нужда от тях.