SELECT concat(date(alltable.t_stamp), ' ', hour(alltable.t_stamp), ':00') as StartTimestamp, concat('H',TIMESTAMPDIFF(HOUR,DATE_FORMAT(alltable.t_stamp,"%Y-%m-%d %H:00:00"),DATE_FORMAT(now(),"%Y-%m-%d %H:00:00"))) as Hour, concat(cast(COUNT(*) as char),' pph') AS Inducted, concat(cast(SUM(alltable.ACTUAL_DEST <> 'S03999') as char),' pph') AS Sorted, concat(cast(SUM(alltable.DivertStatus = 7) as char),' pph') AS DestinationInvalid, concat(cast(SUM(alltable.DivertStatus = 16) as char),' pph') AS DestinationNone, concat(cast(SUM(alltable.DivertStatus = 12) as char),' pph') AS DestinationDisabled, concat(cast(SUM(alltable.DivertStatus = 5) as char),' pph') AS DestinationFull, concat(cast(SUM(alltable.DivertStatus = 2) as char),' pph') AS Unexpected, concat(cast(SUM(alltable.DivertStatus = 6) as char),' pph') AS DestinationFault, concat(cast(SUM(alltable.DivertStatus = 14) as char),' pph') AS DivertFail, concat(cast(SUM(alltable.DivertStatus = 4) as char),' pph') AS GapError, concat(cast(SUM(alltable.DivertStatus = 17) as char),' pph') AS Lost, concat(cast(SUM(alltable.DivertStatus = 3) as char),' pph') AS TrackingError, concat(cast(SUM(alltable.DivertStatus = 1) as char),' pph') AS Unknown, concat(cast(SUM(alltable.DivertStatus = 21) as char),' pph') AS Unsafe FROM alltable Where (alltable.t_stamp BETWEEN :starttime AND :endtime) GROUP BY hour(alltable.t_stamp)