【问题标题】:Activerecord get multiple most recent recordsActiverecord 获取多条最近的记录
【发布时间】:2011-08-19 19:23:42
【问题描述】:

我有以下简化的表格:

| id | order_id | created_at |  
| 1  |  1       | 2011-07-11 |  
| 2  |  1       | 2011-07-12 |  
| 3  |  2       | 2011-07-13 |  
| 4  |  2       | 2011-07-14 | 

现在我正在尝试获取订单列表的所有记录,但只有每个 order_id 的最新记录

EdpuOrder.find(:all, :conditions => "edpu_orders.order_id IN (#{ids})", :order => "edpu_orders.created_at")

ids 变量是由子查询生成的,假设它现在是“1, 2”。上面的语句应该返回记录 2 和 4。有什么想法吗?

【问题讨论】:

  • 我正在使用 Ruby / Rails,更新了标签列表...
  • 它返回了哪些元素?
  • 上面的语句给了我列表中的所有记录
  • 看看这个答案,看看是否有帮助:stackoverflow.com/questions/6953512/…

标签: ruby-on-rails ruby activerecord


【解决方案1】:

找到一种将 id 放入数组的方法。

ids = [1, 2]
EdpuOrder.where(:order_id => ids).order(:created_at)

顺便说一下,这只适用于 Rails 3 及更高版本。

【讨论】:

  • 这将给我所有四个记录,按日期排序,而我只需要记录 2 和 4...
【解决方案2】:

试试这个范围(我用正确的表名替换your_table):

named_scope :top_orders, :from=>"(select * from your_table order by created_at desc) as tmp", :group => "order_id"

现在YourModel.top_orders 应该做的事情

【讨论】:

    【解决方案3】:
    EdpuOrder.where("(edpu_orders.order_id, edpu_orders.id) IN 
             (SELECT order_id, MAX(id) FROM edpu_orders GROUP BY order_id)").
    order("created_at DESC")
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2023-03-17
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多