Try it this way
SELECT COUNT(*) total
FROM
(
SELECT 1
FROM
(
SELECT *,
@n := @n + 1 rnum,
@g := IF(value BETWEEN 15 AND 20, @g + 1, 1) grnum,
@p := value
FROM table1 CROSS JOIN (SELECT @n := 0, @p := NULL, @g := 0) i
ORDER BY datetime
) q
GROUP BY rnum - grnum
HAVING COUNT(*) >= 5
AND TIMESTAMPDIFF(HOUR, MIN(datetime), MAX(datetime)) >= 1
) p
Output:
| TOTAL | |-------| | 1 |
Here is SQLFiddle demo