如何在DataMapper中按顺序使用聚合?

时间:2013-04-02 01:59:51

标签: ruby datamapper ruby-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])

但你不能像那样使用max。我找不到怎么做。

你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

似乎没有必要使用max aggregate。通过按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