4

我有一個有許多會議的客戶端模型。如何按關聯記錄的最大值對錶格進行排序?

class Client < ActiveRecord::Base 

    has_many :meetings 

end 

class Meeting < ActiveRecord::Base 

    belongs_to :client 

end 

我想產生一個ActiveRecord查詢將返回最近一次會議(由meeting_time柱確定)的順序排序的客戶端,但不知道如何做到這一點。我顯然需要以某種方式加入表格,但我不知道如何在AR中生成合適的子查詢。如何編寫僅包含針對每個客戶端的1個會議的聯合,特別是最近的會議(即給定meetings.client_id的meetings.meeting_time的最高值)。我的數據庫是PostgreSQL。

我以前遇到類似的問題,與他們鬥爭,顯然沒有從這個過程中學到很多東西。一個指向一個很好的資源來了解這些情況也將不勝感激。

+0

最近的意思是什麼?上個星期?上個月? – juanpastas 2013-05-11 03:14:26

+0

沒關係。我正在尋找最近的。 – brad 2013-05-11 03:31:55

回答

6

是這樣的?

Client.joins(:meetings).group('clients.id').order('max(meetings.meeting_time) DESC') 

這將:

  1. 搶客戶
  2. 與會議
  3. 組由客戶端(ID)
  4. 加入他們的行列現在我們可以使用max(meetings.meeting_time)這是最近一次會議每個客戶端
  5. 然後按照最近的會議時間降序排列客戶端
+0

這給出錯誤PG :: Error:ERROR:列「meetings.id」必須出現在GROUP BY子句中,或用於PostgreSQL的聚合函數中,但將group子句更改爲.group('clients.id,meetings .id')給了我想要的東西。謝謝! – brad 2013-05-11 11:25:38

+0

實際上,如果有超過1次會議,仔細檢查將返回客戶端的多個實例。衛生署!還有什麼進展? – brad 2013-05-12 05:01:38

+0

是的,如果你通過客戶端ID和會議ID進行分組,每個客戶端和會議最終會得到一行,這不是我們想要的。我測試了這個查詢,它對我來說工作得很好,什麼是爲你執行的sql查詢?你的模型有沒有範圍? – aromero 2013-05-12 16:17:52

相關問題