SELECT CONCAT(Active.displaypath, ' - ', SUBSTRING_INDEX(Active.source, ':/alm:', -1)) AS Description, SUBSTRING_INDEX(SUBSTRING_INDEX(aed.strValue, '/', 2), '/', -1) AS Location, CONCAT( Active.displaypath, '.HMI.', SUBSTRING_INDEX(aed.strValue, '/', -1) ) AS Tag, CASE Active.priority WHEN 0 THEN 'Diagnostic' WHEN 1 THEN 'Low' WHEN 2 THEN 'Medium' WHEN 3 THEN 'High' WHEN 4 THEN 'Critical' ELSE 'Unknown' END AS Priority, -- First and last seen times for this alarm MIN(Active.eventtime) AS FirstTimestamp, MAX(Active.eventtime) AS LastTimestamp, -- Total duration summed from each active-clear pair CONCAT( LPAD(FLOOR(SUM(Active.duration_seconds) / 3600), 2, '0'), ':', LPAD(FLOOR((SUM(Active.duration_seconds) % 3600) / 60), 2, '0'), ':', LPAD(SUM(Active.duration_seconds) % 60, 2, '0') ) AS Duration, -- Total number of activations COUNT(*) AS Count, -- Newly added columns aed.strValue AS FullTag, Active.displaypath AS Device FROM ( SELECT ae.id, ae.source, ae.eventid, ae.eventtime, ae.priority, ae.displaypath, TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(ae_clear.eventtime, NOW())) AS duration_seconds FROM alarm_events ae LEFT JOIN alarm_events ae_clear ON ae.eventid = ae_clear.eventid AND ae_clear.eventtype = 1 WHERE ae.eventtype = 0 AND ae.displaypath NOT LIKE '%System Startup%' AND ae.source NOT LIKE '%System Startup%' ) AS Active -- OPC tag path for building .hmi.Tag output LEFT JOIN alarm_event_data aed ON aed.id = Active.id AND aed.propname = 'myTag' -- 🔹 Group by the full unique alarm key (tag + alarm name) GROUP BY Active.source, Active.displaypath, aed.strValue ORDER BY FirstTimestamp DESC;