-- Breakdown Pie Chart WITH time range support WITH filtered AS ( SELECT Name, Full, Half_Full, Jam, Disabled, t_stamp, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY t_stamp DESC) AS rn FROM lane_data WHERE t_stamp BETWEEN :startTime AND :endTime ), latest_records AS ( SELECT * FROM filtered WHERE rn = 1 ), totals AS ( SELECT GREATEST(COUNT(*), 22) AS total_lanes, SUM(CASE WHEN Disabled = 1 THEN 1 ELSE 0 END) AS disabled_count, SUM(CASE WHEN Jam = 1 THEN 1 ELSE 0 END) AS jammed_count, SUM(CASE WHEN Half_Full = 1 THEN 1 ELSE 0 END) AS half_full_count, SUM(CASE WHEN Full = 1 THEN 1 ELSE 0 END) AS full_count FROM latest_records ) SELECT 'Enabled' AS `Status`, total_lanes - COALESCE(disabled_count, 0) AS `Count`, CONCAT(ROUND((total_lanes - COALESCE(disabled_count, 0)) * 100.0 / total_lanes, 1), '%') AS `Percentage (%)` FROM totals UNION ALL SELECT 'Disabled', COALESCE(disabled_count, 0), CONCAT(ROUND(COALESCE(disabled_count, 0) * 100.0 / total_lanes, 1), '%') FROM totals UNION ALL SELECT 'Jammed', COALESCE(jammed_count, 0), CONCAT(ROUND(COALESCE(jammed_count, 0) * 100.0 / total_lanes, 1), '%') FROM totals UNION ALL SELECT '50% Full', COALESCE(half_full_count, 0), CONCAT(ROUND(COALESCE(half_full_count, 0) * 100.0 / total_lanes, 1), '%') FROM totals UNION ALL SELECT '100% Full', COALESCE(full_count, 0), CONCAT(ROUND(COALESCE(full_count, 0) * 100.0 / total_lanes, 1), '%') FROM totals;