【发布时间】:2017-04-25 19:28:38
【问题描述】:
抱歉标题,因为我不知道如何简洁地描述我的问题。
假设我们在数据库中有多个 Item 实例,其中包含以下列:name、year 和 version。示例如下:
| id | name | year | version |
|----|-----------|--------|---------|
| 1 | Blockhead | 2010 | 1 |
| 2 | Blockhead | 2010 | 2 |
| 3 | Jughead | 2011 | 1 |
我只想返回名称和年份唯一的结果,但只返回该名称/年份唯一性组合的最新版本。即,我想返回:
| id | name | year | version |
|----|-----------|--------|---------|
| 2 | Blockhead | 2010 | 2 |
| 3 | Jughead | 2011 | 1 |
如果可能的话,我不希望有一个分组数据集...但是我对 SQL/AR 的了解在这方面是有限的,我不知道什么是正确的解决方案。我目前检索所有记录,然后过滤掉我不想要的记录,但这是一个不雅的解决方案。
@items = ::Item.active.paginate(per_page: 30, page: page || 1).to_a
# Do not show a given item unless it's the latest version
@items.delete_if do |item|
@items.any? do |other|
other.id != item.id &&
other.read_attribute(:name) == item.read_attribute(:name) &&
other.year == item.year &&
other.version > item.version
end
end
【问题讨论】:
标签: mysql sql ruby-on-rails activerecord