【问题标题】:How to use an aggregate in an order by in DataMapper?如何在 DataMapper 中按顺序使用聚合?
【发布时间】:2013-04-02 01:59:51
【问题描述】:

我有一个简单的类,例如:

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 。我不知道该怎么做。

你能帮忙吗?

【问题讨论】:

  • 我遇到了同样的问题,无法找到“好的”解决方案。我所做的事情是直接调用 SQL 或添加一个聚合字段(我认为这不适用于您的情况)。

标签: ruby datamapper ruby-datamapper


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 2021-04-13
    • 2014-05-25
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2012-03-27
    相关资源
    最近更新 更多