Home > Software design >  ActiveRecord Get Max Value Without Loading
ActiveRecord Get Max Value Without Loading

Time:05-14

I need to get the last record with a certain value, but without loading it.

I have to do something like:

Thing.where(cool: true).where(created_at: Thing.where(cool: true).maximum(:created_at))

The above is a way to do it, but it does a 2nd query to get the maximum value first. I want to do it all in one query and get the SQL equivalent of something = max(etc).

Just before someone mentions it: .last doesn't work because it returns an object not a relation.

In order words, I need to do .last but returning a relation instead of objects.

CodePudding user response:

Try this way:

Thing.where("cool=1 AND created_at=(SELECT MAX(created_at) FROM things WHERE cool=1)")

On Rails 7, when I tested your query, the database is queried only once.

  • Related