SELECT 
  Active.id AS ID,
  Active.eventtime AS `StartTimestamp`,
  Clear.eventtime AS `EndTimestamp`,
  CONCAT(
    LPAD(FLOOR(duration_seconds / 3600), 2, '0'), ':',
    LPAD(FLOOR((duration_seconds % 3600) / 60), 2, '0'), ':',
    LPAD(duration_seconds % 60, 2, '0')
  ) AS Duration,
  CONCAT(
    SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(Active.source, '/HMI/ALARMST', 1), ':/tag:', -1), '/', -1),
    ' - ',
    SUBSTRING_INDEX(Active.source, ':/alm:', -1)
  ) AS Description,
  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,
  SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(Active.source, '/HMI/ALARMST', 1), ':/tag:', -1), '/', -1) AS Tag,
  SUBSTRING_INDEX(SUBSTRING_INDEX(Active.source, '/tag:', -1), '/', 1) AS MCM
FROM (
  SELECT 
    ae.id,
    ae.eventtime,
    ae.eventid,
    ae.source,
    ae.priority,
    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
) AS Active
LEFT JOIN alarm_events Clear 
  ON Active.eventid = Clear.eventid AND Clear.eventtype = 1
ORDER BY Active.eventtime DESC;
