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 Total, concat(cast(SUM(SUBSTRING(alltable.ScanLabel,1,1) <> '?' AND SUBSTRING(alltable.ScanLabel,1,1) <> '9' AND SUBSTRING(alltable.ScanLabel,1,1) <> '0') as char),' pph') AS GoodRead, concat(cast(SUM(SUBSTRING(alltable.ScanLabel,1,1) = '?') as char),' pph') AS NoRead, concat(cast(SUM(SUBSTRING(alltable.ScanLabel,1,1) = '9') as char),' pph') AS MultiRead, concat(cast(SUM(SUBSTRING(alltable.ScanLabel,1,1) = '0') as char),' pph') AS NoCode FROM alltable Where (alltable.t_stamp BETWEEN :starttime AND :endtime) GROUP BY hour(alltable.t_stamp)