首页 > 解决方案 > 找到多个时的最新记录

问题描述

我有这些project记录:

---------------------------------
|id|name      |rate  |start_date|
---------------------------------
|1 |project A |90.0  |01-01-2017|
|2 |project B |100.0 |01-01-2018|
|3 |project A |95.0  |01-01-2018|
---------------------------------

我想要所有记录,除非有多个具有相同名称的记录,在这种情况下,我只想要最近的一个start_date。在上面的示例中,我想获取记录 2 和 3。

我怎样才能做到这一点?到目前为止,我尝试过distinct,但没有成功。

标签: ruby-on-railsactiverecord

解决方案


查询:

SELECT project.*
FROM project
LEFT JOIN project as p 
ON 
  p.name = project.name 
  AND 
  project.start_date < p.start_date
WHERE p.start_date IS NULL

这是如何运作的!(我去过那儿)

您可以在此处此处参考我的答案以了解其工作原理。

等等,但是如何在 Rails 中做到这一点?!

Project.joins(%Q|
  LEFT JOIN projects as p 
  ON 
  p.name = projects.name 
  AND 
  projects.start_date < p.start_date
|).where(p: { start_date: nil })

推荐阅读