Není potřeba WHILE
smyčka.
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
Také zachování status_time
v tabulce je chyba (pokud se nejedná o netrvalý, vypočítaný sloupec). Efektivně ukládáte stejná data na dvou místech v databázi, což bude mít za následek nekonzistence. Totéž platí pro vložení těchto dat do jiné tabulky s časy rozdělenými podle typu stavu. Nevytvářejte novou tabulku k uložení dat, použijte dotaz k získání dat, když je potřebujete.