By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE testing (id INT, from_time TIME, to_time TIME, task VARCHAR(255));
INSERT INTO testing VALUES
(1, '21:00:00', '22:00:00', 'Cleaning(some task)'),
(1, '22:00:00', '23:30:00', 'Fumigation'),
(1, '04:00:00', '7:00:00', 'Disinfection'),
(1, '02:00:00', '4:00:00', 'Break'),
(1, '23:30:00', '2:00:00', 'Fogging'),
(2, '09:00:00', '10:00:00', 'Cleaning(some task)'),
(2, '16:00:00', '18:30:00', 'Disinfection'),
(2, '11:30:00', '14:00:00', 'Fumigation'),
(2, '14:00:00', '16:00:00', 'Fogging'),
(2, '10:00:00', '11:30:00', 'Break');
Records: 10 Duplicates: 0 Warnings: 0
SELECT * FROM testing;
id | from_time | to_time | task |
---|---|---|---|
1 | 21:00:00 | 22:00:00 | Cleaning(some task) |
1 | 22:00:00 | 23:30:00 | Fumigation |
1 | 04:00:00 | 07:00:00 | Disinfection |
1 | 02:00:00 | 04:00:00 | Break |
1 | 23:30:00 | 02:00:00 | Fogging |
2 | 09:00:00 | 10:00:00 | Cleaning(some task) |
2 | 16:00:00 | 18:30:00 | Disinfection |
2 | 11:30:00 | 14:00:00 | Fumigation |
2 | 14:00:00 | 16:00:00 | Fogging |
2 | 10:00:00 | 11:30:00 | Break |
SELECT t1.*
FROM testing t1
JOIN (
SELECT id, TIMEDIFF(MAX(from_time), MIN(from_time)) AS diff
FROM testing
GROUP BY id
) t2 ON t1.id = t2.id
ORDER BY t1.id, IF(t2.diff > '12:00' AND from_time < '12:00', from_time + INTERVAL 24 HOUR, from_time);
id | from_time | to_time | task |
---|---|---|---|
1 | 21:00:00 | 22:00:00 | Cleaning(some task) |
1 | 22:00:00 | 23:30:00 | Fumigation |
1 | 23:30:00 | 02:00:00 | Fogging |
1 | 02:00:00 | 04:00:00 | Break |
1 | 04:00:00 | 07:00:00 | Disinfection |
2 | 09:00:00 | 10:00:00 | Cleaning(some task) |
2 | 10:00:00 | 11:30:00 | Break |
2 | 11:30:00 | 14:00:00 | Fumigation |
2 | 14:00:00 | 16:00:00 | Fogging |
2 | 16:00:00 | 18:30:00 | Disinfection |