2013-04-02 14 views
2

我有一個簡單的類,如:如何在DataMapper中按順序使用聚合?

class Foo 
    include DataMapper::Resource 
    property :id, Serial 
    property :bar, Text, lazy: false 
    property :created_on, DateTime, default: lambda { |r,p| DateTime.now } 
end 

我想選擇他們,通過酒吧分組和MAX(created_on)訂購。我需要的SQL是:

SELECT "bar" FROM "foo" GROUP BY "bar" ORDER BY MAX("created_on") DESC 

,但我不知道如何與DataMapper的得到這個。

我已經試過類似:

Foo.all(fields: [:bar], unique: true, order: [:created_on.desc.max]) 

,但你不能用最大類的。我無法找到如何去做。

你能幫忙嗎?

+1

我有同樣的問題,不能想出一個「好」的解決方案。我所做的事情是直接調用SQL或添加一個聚合的字段(我認爲這不適用於你的情況)。 – AlexQueue

回答

1

似乎使用最大聚合是沒有必要的。按照created_on列的降序排列,它將查找MAX並從那裏開始。

你也許可以矇混過關:

Foo.all(fields: [:bar], unique: true, order: [created_on.desc]) 

沒有順序使用的.max。

這將是一樣的:

SELECT "bar" FROM "foo" GROUP BY "bar" ORDER BY "created_on" DESC 

希望這個作品。

而且看看 http://datamapper.org/docs/find.html