WITH LANES AS ( SELECT DATE_FORMAT(MIN(s04_timestamp), "%Y-%m-%d %H:00") AS start_timestamp, CONCAT("H", CAST( TIMESTAMPDIFF( HOUR, DATE_FORMAT(MIN(s04_timestamp), "%Y-%m-%d %H:00:00"), DATE_FORMAT(LEAST(CURRENT_TIMESTAMP(), :endDate), "%Y-%m-%d %H:00:00") ) AS CHAR ) ) AS hour, COUNT(*) AS total FROM package_history WHERE s04_timestamp BETWEEN :startDate AND :endDate AND destination_act = :lane GROUP BY DATE_FORMAT(s04_timestamp, "%Y-%m-%d %H:00") ) SELECT start_timestamp AS time, hour, /* Counts: */ total AS total_count, /* PPH: */ total AS total_pph, /* Percents: */ ROUND(total/total, 4) AS total_percent FROM LANES;