Я чувствую, что есть простое решение - я смотрел на другие вопросы о переполнении стека, но они кажутся неэффективными, или, возможно, я делаю их неправильно.
Вот упрощенные версии таблиц, с которыми я работаю.
CREATE TABLE object_values (
object_value_id INT PRIMARY KEY,
object_id INT,
value FLOAT,
date_time DATETIME,
INDEX (object_id)
);
CREATE TABLE object_relations (
object_group_id INT,
object_id INT,
INDEX (object_group_id, object_id)
);
Существует отношение многие-к-одному - множество значений объекта на один объект (в среднем 150 значений объекта на объект)
Я хочу получить последнее значение объекта (определяемое полем date_time) для каждого object_id на основе object_group_id.
Текущий запрос:
SELECT a.`object_id`, a.`value`
FROM `object_values` AS a
LEFT JOIN `object_relations` AS b
ON ( a.`object_id` = b.`object_id` )
WHERE b.`object_group_id` = 105
ORDER BY a.`date_time` DESC
Это возвращает все записи - если я выполняю GROUP BY a. object_id
, тогда ORDER BY игнорируется
Я пробовал серию вариантов - и я прошу прощения, потому что знаю, что это распространенный вопрос, но попытка других решений пока не совсем работает. Любая помощь будет принята с благодарностью.
Некоторые решения вернулись с результатами примерно через 70 секунд - это большая система, поэтому она должна быть немного быстрее.