Как использовать агрегат в порядке, в 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(made_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 ответ

Решение

Кажется, что использование максимального агрегата не является необходимым. Упорядочив в порядке убывания столбца созданного_on, он найдет МАКС и пойдет оттуда.

Вы могли бы сойти с рук:

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

Другие вопросы по тегам