Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据一列的最大值从表中提取所有数据并分组到另一列_Mysql_Ruby On Rails_Group By - Fatal编程技术网

Mysql 根据一列的最大值从表中提取所有数据并分组到另一列

Mysql 根据一列的最大值从表中提取所有数据并分组到另一列,mysql,ruby-on-rails,group-by,Mysql,Ruby On Rails,Group By,我有一个名为Policy的表,如: Name Version Id Policy1 1.0.0 1 Policy2 2.0.0 2 Policy1 1.1.1 3 Policy2 2.0.1 4 我试图提取以下信息: Name Version Id Policy1 1.1.1 3 Policy2 2.0.1 4 基于每个名称一个值和表中的最高版本 我尝试了以下方法: Name Version Id Policy1 1.1.1

我有一个名为Policy的表,如:

Name     Version Id
Policy1  1.0.0   1
Policy2  2.0.0   2
Policy1  1.1.1   3
Policy2  2.0.1   4
我试图提取以下信息:

Name     Version Id
Policy1  1.1.1   3
Policy2  2.0.1   4
基于每个名称一个值和表中的最高版本

我尝试了以下方法:

Name     Version Id
Policy1  1.1.1   3
Policy2  2.0.1   4
ActiveRecord::Base.connection.exec_query“选择MAXA.version作为rev,A.name作为策略A组中的A.name按A.name”

如果我将id添加到混合中,如:

ActiveRecord::Base.connection.exec_query“按A.name从策略A组中选择MAXA.version作为rev、A.name、A.id”

我得到一个错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Expression #3 of SELECT             
list is not in GROUP BY clause and contains nonaggregated column     
'pikto_dev.A.id' which is not functionally dependent on columns in 
GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by: (SELECT MAX(A.version) AS rev, A.name, 
A.id FROM policies A GROUP BY A.name)`
我也试过这样的方法:


Policy.select:id,MAXversion,:name.group:name

如果您也需要该id,则应将聚合结果与原始表连接起来

select t1.rev, t1.name, p.id  
from (
   SELECT MAX(A.version) AS rev, A.name
  FROM policies A 
   GROUP BY A.name ) t1
inner join  policies p on p.version = t1.rev and t1.name = p.name 

您必须将id放入GROUPBY子句中,或者对id使用聚合函数。您的问题已经在堆栈溢出时得到了询问和回答。如果副本中的答案不能完全回答您的问题,请编辑它,包括原因,并标记此内容以重新打开。谢谢