Неконсистентность запроса с group by + order by + limit
Столкнулся с необъяснимым поведением mysql 5.7 (разумеется под онтопиком).
В запросах нет хранимок, вьюшек, агрегатных функций и прочих сложностей. Таблица table_name статична, данные в ней не меняются. Запросы 1 и 2 отличаются только циферкой - лимитом, т.е. последим символом запроса.
Насколько я понимаю последовательность выполнения конкретного запроса (group by + order by + limit), mysql должен вычислить limit по уже отфильтрованным и отсортированным строкам. То есть при любом запросе вернет одинаковый результат - единственную строку подходящую под condition. Но практике это не так.
Запрос 1 использует лимит=1, возвращает 0 строк. Хотя запрос должен вернуть одну строку, таков condition и набор данных в таблице.
select
tn.id
from
table_name as tn
where
condition
group by
tn.id
order by
tn.id
limit 1
Запрос 2 использует лимит=2, возвращает 1 строку. Именно одну строку этот запрос и должен извлечь, таков condition и набор данных в таблице.
select
tn.id
from
table_name as tn
where
condition
group by
tn.id
order by
tn.id
limit 2