Mysql 根据一列的最大值从表中提取所有数据并分组到另一列
我有一个名为Policy的表,如: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
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使用聚合函数。您的问题已经在堆栈溢出时得到了询问和回答。如果副本中的答案不能完全回答您的问题,请编辑它,包括原因,并标记此内容以重新打开。谢谢