Можно вот так попробовать.
Я убрал из select дублирующиеся поля users.`users_id` и user_dolg.`user_id`
Так как по полю user_dolg.`date` происходит отбор, но оно не включено в список агрегирующих полей, нужно к
нему применить агрегирующую функцию, например так MAX(user_dolg.`date`) либо добавить поле в список агрегирующих полей.
Так как вы присоединяете таблицу `users` левым джойном, то в случае отсутствия в ней записи по users_id в поля этой таблицы вернется значение NULL нужно бы обработать этот случай используя функцию ISNULL например или IFNULL. Если же в таблице `users` всегда есть запись для users_id из таблицы user_dolg, то лучше бы LEFT OUTER JOIN заменить на INNER JOIN. Я в запросе написал вариант с INNER JOIN.
SELECT DISTINCT
users.`users_id`,
users.`name`,
user_dolg.`date`,
SUM(user_dolg.hours) AS sub_hours
FROM `user_dolg`
INNER JOIN `users`
ON users.`users_id` = user_dolg.`user_id`
WHERE user_dolg.`date` BETWEEN '" . $starttime . "' AND '" . $endtime . "'
GROUP BY users.`users_id`, users.`name`, user_dolg.`date`
HAVING COUNT(1) > 1