MySQL ORDER BY被忽略,而GROUP BY被忽略(高效解决方案?)

MySQL ORDER BY被忽略,而GROUP BY被忽略(高效解决方案?),mysql,many-to-one,Mysql,Many To One,我觉得有一个简单的解决方案——我已经研究了关于堆栈溢出的其他问题,但它们似乎效率低下,或者可能是我做错了 下面是我正在使用的表的简化版本 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 ( objec

我觉得有一个简单的解决方案——我已经研究了关于堆栈溢出的其他问题,但它们似乎效率低下,或者可能是我做错了

下面是我正在使用的表的简化版本

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个对象值)

我想根据对象组id获取每个对象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
这将收回所有记录——如果我按.
object\u id
进行分组,那么ORDER BY将被忽略

我已经尝试了一系列的变化——我很抱歉,因为我知道这是一个常见的问题,但是尝试其他的解决方案到目前为止还没有完全奏效。任何帮助都将不胜感激


一些解决方案在大约70秒后返回结果——这是一个大型系统,因此需要更快一些。

在没有分组依据的情况下尝试此版本,使用子查询提取每个对象的最大日期:

SELECT a.`object_id`, a.`value` 
FROM `object_relations` b 
JOIN `object_values` a 
 ON b.`object_id` = a.`object_id`
 AND b.`object_group_id` = 105
WHERE a.`date_time` = (select MAX(date_time) from object_values where object_id = a.object_id)
因为您在where子句中指定了组ID,所以不需要左联接,所以我将该组作为联接中的主表。这可以通过几种方式实现。如果WHERE刚更改为AND,子查询也可以移动到join子句

SELECT a.object_id, a.`value`
FROM object_values a JOIN object_relations b
    ON a.object_id = b.object_id
    JOIN (
    SELECT a.object_id, MAX(a.date_time) MaxTime
    FROM object_relations b JOIN object_values a
        ON a.object_id = b.object_id
    WHERE b.`object_group_id` = 105 
    GROUP BY a.object_id
  ) g ON a.object_id = g.object_id AND a.date_time = g.MaxTime
WHERE b.`object_group_id` = 105 
GROUP BY a.object_id

如果一个组中永远不会有重复的
date\u time
,您可以省略最后的
groupby

我对您的解决方案感兴趣——不得不稍微修改它(将ON子句中的“g.date\u time”更改为“g.MaxTime”),它收回了46条记录,它只能向后拉10。@kerry抱歉,我以为你是按
object\u group\u id
分组的。请参阅更新的答案@Scrum——完美、非常快速的怀疑顺序被忽略<代码>分组依据可能不会返回所需的记录,但最终的行将被排序。您没有返回您订购的产品,那么如何验证这一点?我猜整个查询的格式都不正确,并且返回了错误/缺失的行。