Không cần WHILE
vòng lặp.
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
Ngoài ra, giữ status_time
trong bảng là một sai lầm (trừ khi đó là một cột không liên tục, được tính toán). Bạn đang lưu trữ hiệu quả cùng một dữ liệu ở hai nơi trong cơ sở dữ liệu, điều này sẽ dẫn đến sự mâu thuẫn. Điều tương tự cũng xảy ra với việc đẩy dữ liệu này sang một bảng khác với thời gian được chia nhỏ theo loại trạng thái. Không tạo một bảng mới để chứa dữ liệu, hãy sử dụng truy vấn để lấy dữ liệu khi bạn cần.