我有一個名爲Statement
的模型,屬於Member
。給定一個成員數組,我想創建一個查詢,它將爲每個成員返回最新的語句(最好在一個很好的乾淨查詢中)。ActiveRecord/MySQL查詢返回分組對象集
我想我也許能達到這個使用group
和order
- 是這樣的:
# @members is already in an array
@statements = Statement.all(
:conditions => ["member_id IN(?)", @members.collect{|m| m.id}],
:group => :member_id,
:order => "created_at DESC"
)
但不幸的是上面總是返回爲每個成員最古老聲明。我已經嘗試交換訂單選項,但是它總是返回組中最早的陳述,而不是最近的陳述。
我猜group_by
是不是實現這一目標的方式 - 那麼我該如何實現呢?
PS - 如果您知道如何在原始MySQL中實現此目標,則任何非Ruby/Rails人員都會閱讀此內容,然後開除。
謝謝你,奇妙地工作。對於任何感興趣的人,這是我如何將它集成到Rails:'Statement.find_by_sql [「SELECT * FROM statements s JOIN(SELECT member_id,MAX(date_from)max_date FROM statements GROUP BY member_id)latest ON s.member_id = latest.member_id AND s.date_from = latest.max_date WHERE s.member_id IN(?)「,@ members.collect {| m | m.id}]' – aaronrussell 2010-10-18 14:16:10