-- Step 1: generate dates using a numbers table (0 to 17 for 15 past + today + 2 future) SELECT DATE(DATE_ADD(CURDATE(), INTERVAL n.n - 15 DAY)) AS jam_day, COALESCE(SUM(CASE WHEN a.category = 'Inbound_jam' THEN 1 ELSE 0 END), 0) AS Inbound_jam, COALESCE(SUM(CASE WHEN a.category = 'Sorter_jam' THEN 1 ELSE 0 END), 0) AS Sorter_jam FROM ( SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 ) AS n LEFT JOIN ( SELECT DATE(ae.eventtime) AS event_day, CASE WHEN m.category IS NOT NULL THEN m.category ELSE 'Unknown' END AS category FROM alarm_events ae JOIN ( SELECT 'UL15_1_TPE1' AS device, 'Inbound_jam' AS category UNION ALL SELECT 'UL14_1_TPE1', 'Inbound_jam' UNION ALL SELECT 'PS3_1_TPE1', 'Inbound_jam' UNION ALL SELECT 'PS3_1_TPE2', 'Inbound_jam' UNION ALL SELECT 'PS3_1_TPE3', 'Inbound_jam' UNION ALL SELECT 'PS3_2_TPE1', 'Inbound_jam' UNION ALL SELECT 'PS3_4_TPE1', 'Inbound_jam' UNION ALL SELECT 'PS3_8_TPE1', 'Inbound_jam' UNION ALL SELECT 'PS3_10_TPE1', 'Inbound_jam' UNION ALL SELECT 'PS3_12_TPE1', 'Sorter_jam' ) AS m ON ae.displaypath = m.device WHERE ae.eventtype = 0 AND ae.eventtime BETWEEN DATE_SUB(CURDATE(), INTERVAL 15 DAY) AND DATE_ADD(CURDATE(), INTERVAL 2 DAY) AND ae.displaypath NOT LIKE '%System Startup%' AND ae.source NOT LIKE '%System Startup%' ) AS a ON DATE(DATE_ADD(CURDATE(), INTERVAL n.n - 15 DAY)) = a.event_day GROUP BY jam_day ORDER BY jam_day ASC;