【发布时间】:2014-06-20 05:25:06
【问题描述】:
我有一张用户表,表中的一个字段是公司。
我每天处理一定数量的用户,所以我使用limit(x)。我按公司对它们进行排序,并希望确保我的限制在公司更改时结束。我不想让来自一家公司的用户得到处理,而另一家则没有。但我想每天处理最少数量的用户,而不是公司数量。
例如,如果我有 3 个来自 A 公司的用户、2 个来自 B 公司的用户、3 个来自 C 公司的用户,并且限制为 4(最少处理)
目前将在此处拆分
AAAB][BCCC -> 不好(我处理了来自 B 的 1 个用户,而另一个未处理)
我想让公司 A 的所有用户 + 公司 B 的所有用户。
AAABB][CCC -> 好
我只想使用限制作为在这种情况下处理的最小用户数。
我目前有 User.order(lower('company')).limit(4 + 10) 并循环遍历每个以在达到我的实际限制 (4) 后公司更改时停止,但这将不起作用,如果有超过10个用户的公司。另外,这只是一个非常糟糕的解决方案。
最好的方法是什么(最好是 1 个简单的 SQL 语句)? ActiveRecord 语法的加分项
值得注意的是,我的数据库中有 10'000 行。
【问题讨论】:
-
你使用什么类型的sql? (PostgreSQL、MySQL 等)
-
没时间解决,我正在使用 ActiveRecord,需要先搜索 rank 的工作原理(就像这个想法,不确定字符串的性能排名,我有很多记录。
标签: sql activerecord ruby-on-rails-3.2