示例数据:
我有表格订单:
[order_id: 007, state: completed]
[order_id: 123, state: completed]
[order_id: 007, state: failed]
[order_id: 321, state: failed]
[order_id: 111, state: failed]
[order_id: 111, state: failed]
预期产出:
[order_id: 007, state: completed]
[order_id: 123, state: completed]
[order_id: 321, state: failed]
[order_id: 111, state: failed]
我在表格和订单中有很多价值观。具有相同的order_id但不同的状态。我想收到的是没有那些“失败”的订单清单。如果表格中有另一个订单,则说明订单'使用相同的order_id和不同的状态而不是'失败'。
我需要类似的东西:
Order.all.group(:state).take_only_first_value_if("COUNT(*) > 1")
答案 0 :(得分:1)
使用postgreSQL(snippet):
Order.order("order_id, state = 'failed'").select("DISTINCT ON(order_id) *")
答案 1 :(得分:0)
您可以尝试以下方式:
failed = Order.where(state: 'failed').pluck(:order_id)
completed = Order.where(state: 'completed').pluck(:order_id)
what_you_want = Order.where("order_id IN (#{failed}) AND order_id IN (#{completed})").distinct