我有这个表:
用户
<表类>名称 角色 tbody><<tr>梅森 工程师 杰克逊工程师 梅森主管 杰克逊主管 格雷厄姆工程师 格雷厄姆工程师 表类>
如果我想在纯SQL中这样做,我必须使用GROUP BY。
SELECT Name, MAX(Role) FROM User GROUP BY Name
因此,一种方法是对基本连接执行此SQL语句。
ActiveRecord::Base.connection.execute("SELECT Name, MAX(Role) FROM User GROUP BY Name")
这将提供您所需要的数据,尽管它不会作为ActiveRecord模型返回。如果你需要这些模型,那么我会使用find_by_sql,并做一个内部连接来提供记录。
User.find_by_sql("SELECT User.* FROM User INNER JOIN (SELECT Name AS n, MAX(Role) AS r FROM User GROUP BY Name) U2 WHERE Name = U2.n AND Role = U2.r")
不幸的是,这将为Graham提供两个记录。