-- Generate all lanes 101-124 excluding 102, 104, 106 WITH DesiredLanes AS ( SELECT 101 + n AS lane_number FROM ( SELECT a.N + b.N * 10 AS n FROM (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a, (SELECT 0 AS N UNION SELECT 1 UNION SELECT 2) b ) numbers WHERE n <= 23 -- 101 to 124 AND (101 + n) NOT IN (102, 104, 106) ), -- Aggregate Full alarms per lane FullAlarms AS ( SELECT aed.strValue AS myLocation, COUNT(*) AS FullCount, SUM(TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(ae_clear.eventtime, NOW()))) AS FullDuration FROM alarm_events ae LEFT JOIN alarm_events ae_clear ON ae.eventid = ae_clear.eventid AND ae_clear.eventtype = 1 JOIN alarm_event_data aed ON aed.id = ae.id AND aed.propname = 'myLocation' WHERE ae.eventtype = 0 AND ae.source LIKE '%Full%' AND ae.source LIKE '%Chute%' AND ae.eventtime BETWEEN :startDate AND :endDate GROUP BY aed.strValue ), -- Aggregate Jammed alarms per lane JammedAlarms AS ( SELECT aed.strValue AS myLocation, COUNT(*) AS JamCount, SUM(TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(ae_clear.eventtime, NOW()))) AS JamDuration FROM alarm_events ae LEFT JOIN alarm_events ae_clear ON ae.eventid = ae_clear.eventid AND ae_clear.eventtype = 1 JOIN alarm_event_data aed ON aed.id = ae.id AND aed.propname = 'myLocation' WHERE ae.eventtype = 0 AND ae.source LIKE '%Jammed%' AND ae.source LIKE '%Chute%' AND ae.eventtime BETWEEN :startDate AND :endDate GROUP BY aed.strValue ), -- Combine Full and Jammed Aggregated AS ( SELECT dl.lane_number, COALESCE(f.FullCount, 0) AS FullCount, COALESCE(j.JamCount, 0) AS JamCount, COALESCE(f.FullDuration, 0) AS FullDuration, COALESCE(j.JamDuration, 0) AS JamDuration FROM DesiredLanes dl LEFT JOIN FullAlarms f ON f.myLocation = CONCAT('S03_CH', dl.lane_number) LEFT JOIN JammedAlarms j ON j.myLocation = CONCAT('S03_CH', dl.lane_number) ) SELECT CONCAT('S03_CH', lane_number) AS Lane, FullCount, JamCount, FullDuration, JamDuration FROM Aggregated ORDER BY lane_number;