【发布时间】:2014-05-25 17:14:57
【问题描述】:
我有一个表格,其中有一列是浮动的。 我通过 created_at 订购表格: Foo.order(:created_at)
我想从该有序表中选择可变数量的记录。
它是多种多样的,因为我需要对记录中浮点列的值求和,以获得大于目标浮点的值。
假设我在上面订购了我的表,它有这 4 条记录,以及它们的浮点值:
- 30
- 50
- 40
- 20
如果我的目标浮点数是 60,我只想返回前 2 条记录 如果我的目标浮点数是 100,我想返回 3 条记录 如果我的目标浮点数是 20,我只想要第一条记录
有没有办法在活动记录或直接 sql 中做到这一点?
这样做会更快,还是我应该查询所有记录并只使用我需要的记录?
编辑:
基于该问题,我想从已按其中一列首先排序的表中进行选择,比如说 fizz:
select foo1.id,
(select coalesce(sum(f2.amount),0)
from (select * from foo order by fizz) f2
where f2.id < f1.id) as amount_total
from (select * from foo order by fizz)
group by f1.id
having amount_total < target_total
这可行,但并不理想,因为您要订购两次餐桌。有没有办法一次性订购表格,然后将其用于 f1 和 f2?
【问题讨论】:
标签: sql ruby-on-rails performance