Вы не можете просто использовать max () для столбца и автоматически выбирать другие столбцы из той же строки. В более поздних версиях MySQL опция ONLY_FULL_GROUP_BY включена по умолчанию, что означает, что даже попытка этого запроса является ошибкой (см. https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html).
Вам нужно выяснить, какие строки вам нужны, а затем выбрать их:
SELECT sq.store_id, sq.product_id, sq.time_create AS last_time, sq.store_product_quantity_new
FROM stockquantitylogs AS sq
INNER JOIN (
SELECT store_id, product_id, MAX(time_create) AS time_create
FROM stockquantitylogs
GROUP BY store_id, product_id
) AS sq_latest USING(store_id, product_id, time_create)
Здесь мы сначала выбираем нужные (последние) строки с помощью:
SELECT store_id, product_id, MAX(time_create) AS time_create
FROM stockquantitylogs
GROUP BY store_id, product_id
Затем внешний запрос выбирает строки для возврата, соединяясь с соответствующими строками из внутренних результатов.
Чтобы это работало хорошо, вам понадобится индекс для соответствующих строк:
INDEX `store_id_product_id_time_create` (`store_id`, `product_id`, `time_create`)
Обратите внимание, что я удалил ваше утверждение where - если это необходимо, добавьте его во внутренний запрос sq_latest
.