2

我有一个简单的课程,例如:

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

我想选择它们,按 bar 分组并按 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 。我不知道该怎么做。

你能帮我吗?

4

1 回答 1

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

于 2013-05-13T14:49:48.717 回答