Find the last entry by user_id

How do I find the all records that are the latest from each user, by
user_id? I’m trying to get an :average working but I can’t solve it.
This is my find:

Dada.average(:column_with_nr, :conditions => [“created_at > ?”,
@date.to_s(:db)], :order => ‘created_at’, :select => ‘DISTINCT user_id’)

Pål Bergström wrote:

How do I find the all records that are the latest from each user, by
user_id? I’m trying to get an :average working but I can’t solve it.
This is my find:

Dada.average(:column_with_nr, :conditions => [“created_at > ?”,
@date.to_s(:db)], :order => ‘created_at’, :select => ‘DISTINCT user_id’)

:order => ‘created_at desc’, :limit => 1, :group => ‘user_id’

?

What also helps is to read your log, find your select statement, stick
that into
an editor, edit it, stick it into MySQL, and see what it does. Repeat
until it
works, then either retrofit it into your .average() statement, or just
call
count_by_sql on the raw SELECT.

As a style thing, there’s no harm in calling a raw SELECT statement from
Rails,
so long as you don’t go basing your whole architecture on it!

Phlip wrote:

What also helps is to read your log, find your select statement, stick
that into
an editor, edit it, stick it into MySQL, and see what it does. Repeat
until it
works, then either retrofit it into your .average() statement, or just
call
count_by_sql on the raw SELECT.

As a style thing, there’s no harm in calling a raw SELECT statement from
Rails,
so long as you don’t go basing your whole architecture on it!

That’s true :slight_smile: Thanks for the tip.

:order => ‘created_at desc’, :limit => 1, :group => ‘user_id’

Doesn’t work. I must do something wrong, or this is not suited for
:average. I get a result all right, but it’s a hash or array, not an
average value.