Нет, он не должен, но, по-видимому, он работает чаще, чем нет. Реальная проблема с вашим запросом заключается в том, что теоретически это нарушает 1NF. Предполагая, что mysql всегда выбирает первую строку в таком случае, вы создаете запрос, но на самом деле он может отличаться и не является надежным, как это предлагается в документации. При выборе неагрегированных столбцов, которые не всегда одинаковы, MySql может свободно выбирать любое значение, поэтому итоговое значение, которое оно фактически показывает, является неопределенным.
Вопрос требует большей ясности относительно того, сколько строк для каждого типа требуется, например, для нескольких экземпляров максимального значения для каждого типа. Но я получаю смутное представление о том, что вы пытаетесь - «Вы хотите, чтобы получить значение макс для каждого типа и вместе с ним все другие значения столбцов для этой строки»
Чтобы сделать запрос, детерминировано Я хотел бы сделать - Если несколько строк для каждого типа отлично
SELECT *
FROM entry e1
WHERE (e1.type, e1.jc_epoc) IN
( SELECT e.type, MAX(e.jc_epoc)
FROM entry e
GROUP BY e.type
)
Если несколько строк для каждого типа не в порядке, вы должны использовать ключевое значение, чтобы получить единственное значение
SELECT e2.*
FROM entry e2
LEFT OUTER JOIN entry e3
ON e3.jc_epoc >= e2.jc_epoc
AND e3.type = e2.type
AND e3.id > e2.id
WHERE e3.id IS NULL
Примечание: - Запросы выше могут иметь больше возможностей оптимизации. Для получения более четких/лаконичных требований запросы могут быть оптимизированы версии Экс- только для MAX (jc_epoc) для каждого типа требуется, и никакие другие Колонку значения
SELECT e.type, MAX(e.jc_epoc)
FROM entry e
GROUP BY e.type
Смело SQLFiddle it.
Можете ли вы добавить пример данных и схему? – Beginner