Minuty a sekundy můžete odříznout pomocí DATE_FORMAT. Takže:
-- date >= start AND date < end:
SELECT count(*) AS cnt
FROM log WHERE
date >= CONVERT(DATE_FORMAT(NOW(),'%Y-%m-%d %H:00:00'), DATETIME)
date < CONVERT(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 HOUR),'%Y-%m-%d %H:00:00'), DATETIME);
Nebo úspornější zápis:
-- date BETWEEN start AND end:
SELECT count(*) AS cnt
FROM log WHERE
date
BETWEEN CONVERT(DATE_FORMAT(NOW(),'%Y-%m-%d %H:00:00'), DATETIME)
AND CONVERT(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 HOUR),'%Y-%m-%d %H:00:00'), DATETIME);
V Mysql je pro CONVERT výchozí DATETIME formát 'YYYY-MM-DD HH:MM:SS', takže pokud použijete tento formát, nemusíte používat STR_TO_DATE() ale stačí CONVERT. On ani ten CONVERT není asi potřeba, jelikož se zavolá implicitně.