Какая же жуть у вас написана. Мало того, что запросы неэффективные, так они ещё и не будут работать в свежих версиях MySQL с настройками по умолчанию. В стандарте SQL при группировке можно выбирать только поля, входящие в условия группировки или в агрегатные функции, то есть выбор * при группировке - это ошибка.
Но, даже если брать старые версии MySQL, то условия во втором запросе всё равно кривые. При группировке нескольких строк поля, не входящие в условие группировки или агрегатное выражение могут быть взяты из любой из группируемых строк (что хорошо видно в новых версиях, где введена функция ANY_VALUE). Значит `state` и `queue` могут быть из любой строки.
SELECT `d`.`datetime`, COUNT(`th`.`create_time`) AS `count`
FROM (
SELECT DISTINCT DATE(`create_time`) + INTERVAL 22 HOUR AS `datetime`
FROM `tick`
) AS `d`
LEFT JOIN `tick_history` AS `th`
ON `th`.`create_time` < `d`.`datetime`
AND `th`.`state` NOT IN (1, 4, 9)
AND `th`.`queue` = 1
GROUP BY `d`.`datetime`