I'm facing a strange issue with MySQL 5.5/5.6. I've implemented a classic merge intervals algorithm in SQL, but it's not working as expected with some rows. I used Merging intervals in one pass in SQL and Most efficient way to sum overlapping datetimes in MySQL as starting references (C++ @ http://www.geeksforgeeks.org/merging-intervals/)
Anyone able to spot any issue on this?
SELECT MIN(inizio) as inizio, MAX(fine) as fine
FROM (
SELECT
@interval_id := IF(attendances.inizio > @interval_end, @interval_id + 1, @interval_id) AS interval_id,
@interval_end := IF(attendances.inizio < @interval_end, GREATEST(@interval_end, attendances.fine), attendances.fine) AS interval_end,
attendances.inizio,
attendances.fine
FROM attendances
INNER JOIN attendance_sheets ON ( attendance_sheet_id = attendance_sheets.id)
ORDER BY attendances.inizio,attendances.fine
) intervals GROUP BY interval_id;
From these rows
I get a skipped @interval_id and wrong @interval_end for
which results in a wrong merge for 2017-01-26
thanks in advance nicola