代码之家  ›  专栏  ›  技术社区  ›  Snips

将distinct与另一个条件相结合

  •  0
  • Snips  · 技术社区  · 6 年前

    我正在将一个Rails 3.2应用程序迁移到Rails 5.1(不是在时间之前),我遇到了一个where查询问题。

    在Rails 3.2上运行的代码如下所示,

    sales = SalesActivity.select('DISTINCT batch_id').where('salesperson_id = ?', sales_id)
    
    sales.find_each(batch_size: 2000) do |batchToProcess|
        .....
    

    当我在Rails 5.1下运行此代码时,当它尝试for\u each时,似乎会导致以下错误,

    ArgumentError (Primary key not included in the custom select clause):
    

    我想以数组(?)结束然后我可以遍历给定salesperson\u id的唯一batch\u id,就像使用Rails 3.2一样。

    出于我不理解的原因,看起来我可能需要包含要遍历的整个记录(我的想法是需要包含主键)?

    我试图重新表述“where”,并尝试了以下内容,

    sales = SalesActivity.where(salesperson_id: sales_id).select(:batch_id).distinct
    

    但是,组合ActiveRecordQuery将DISTINCT应用于salesperson\u id和batch\u id,这就是失败1

    此外,因为我仍在使用select(让distinct知道我要“distinct”的列),它当然也只选择batch\u id列,这是我试图避免的-这就是#FAIL2

    如何有效地提取给定salesperson\u id的所有唯一batch\u id记录,以便为每个记录提取批次id?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   vol7ron    6 年前

    怎么样:

    SalesActivity.where(salesperson_id: sales_id).pluck('DISTINCT batch_id')
    

    可能需要更改的顺序 where pluck 但是 应返回batch\u ID的数组