WITH RECURSIVE HOURS AS ( SELECT 0 AS HOUR UNION ALL SELECT HOUR + 1 FROM HOURS WHERE HOUR < 23 ) SELECT HOUR , COUNT(B.ANIMAL_ID) FROM HOURS A LEFT JOIN ANIMAL_OUTS B ON A.HOUR = HOUR(B.DATETIME) GROUP BY HOUR ORDER BY HOUR