2017-04-24 40 views
1

我有一個graphs表,其中有nameversion字段。每次插入記錄時,如果數據庫中不存在名稱,則版本爲0,否則爲max(version) + 1。我想獲取每個唯一名稱的最高版本記錄列表。下面的代碼執行此操作:如何找到組中的特定字段的最大值的記錄

def self.latest_versions 
    Graph.group(:name).maximum(:version).map{ |k,v| find_by name: k, version: v} 
end 

,但我不知道是否有一個更快的方式做到這一點使用範圍,只是鏈活動記錄的關係?

回答

1

這個怎麼樣

def self.latest_versions 
    name_versions = Graph.group(:name).maximum(:version).map {|k,v| [k,v].join(';')} 
    Graph.where("concat(name, ';', version) IN (?)", name_versions) 
end 

後得到name, version組,它通過由列轉換成一個數組,其中Concat的2列進1,通過查詢,我們只需要另一個SQL查詢,共2 ,比現有的要好得多。

+0

我不認爲這會起作用,它只是返回所有圖形上具有最大版本號的記錄。有不同類型的圖形,通過:名稱字段進行區分。每種類型的圖都有自己的版本控制,所以名爲'line_plot'的最新圖可能具有版本5,而名爲'bar_plot'的最近圖可能具有版本7.您的代碼只會返回版本7 'bar_plot',但我需要返回版本7或'bar_plot'和版本5'line_plot' – Obromios

+0

是的,現在明白了,對於誤解抱歉。 –

+0

@Obromios我已經更新了'答案',你可以檢查它。 –

相關問題