我的产品表在不同日期有每个产品的多个版本。
我想找到每个max(日期),按version_id分组。 我想要一个与最大日期和version_id对应的行的ActiveRecord :: Relation。
app / models / product.rb中的:
def self.latest_versions
select("max(date) as max_date").
select("version_id").
group("version_id")
end
如何使用此“临时表”加入Product以获取与日期和版本ID匹配的所有产品?我显然无法在上面的方法中选择:id,因为它不是Group By列。
实际情况比较复杂,但也许我错过了这个简化情景下的基本原则?
答案 0 :(得分:3)
def self.latest_versions
t = Product.arel_table
subquery = t.
project(
t[:date].maximum.as("max_date"),
t[:version_id]
).
group(t[:version_id]).
as('subquery')
Product.
joins(Arel::Nodes::InnerJoin.new(subquery,
Arel::Nodes::On.new(
t[:version_id].eq(subquery[:version_id]).and(
t[:date].eq(subquery[:max_date])))))
end