我想通過created_at命令,然後根據外鍵獲取一個DISTINCT集。ORDER BY和DISTINCT ON(...)在Rails中
另一部分是以某種方式使用這是ActiveModelSerializer。具體來說,我希望能夠宣佈:
has_many :somethings
在串行器。讓我進一步解釋...
我能夠得到我需要這個自定義SQL的結果:
def latest_product_levels
sql = "SELECT DISTINCT ON (product_id) client_product_levels.product_id,
client_product_levels.* FROM client_product_levels WHERE client_product_levels.client_id = #{id} ORDER BY product_id,
client_product_levels.created_at DESC";
results = ActiveRecord::Base.connection.execute(sql)
end
是否有任何可能的方式來得到這個結果,但作爲一個的has_many關係的條件那麼我可以在AMS中使用它?
在僞代碼:@client.order(created_at: :desc).select(:product_id).distinct
那當然失敗了,超出我的原因:@ client.products_levels像 會做一些。
任何幫助將是偉大的。
謝謝。
謝謝!這工作。我知道這裏有一個小題目,但你介意解釋這是如何工作的嗎?查看ClientProductLevel上的sql看起來像只會返回全局最新的。我看到了實際得到的sql:'SELECT distinct on(product_id)client_product_levels.product_id, client_product_levels。 FROM「client_product_levels」WHERE「client_product_levels」。「client_id」= $ 1 ORDER BY product_id,created_at desc [[「client_id」, 312]]'。只是想了解如何在範圍和has_many – 2014-12-11 16:55:03
之間創建此外,有沒有辦法建立這個查詢沒有自定義SQL? – 2014-12-11 16:57:30
不客氣!很高興它的工作。我會在上面的答案中提供更多的解釋。 ActiveRecord,AFAIK不支持Postgres'distinct on'機制,並且使用僅由AR本地支持的功能來構建查詢的替代方式是一團糟。 – 2014-12-11 22:08:16