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