我有一个downloads
表,用于记录每次用户下载文件的时间。我想编写一个返回最新x下载的查询,但最多只显示一次用户。例如,假设这是下载文件的顺序,我想检索最近的2次下载:
// Downloads table
1. Steve - 12:01am
2. James - 12:02am
3. John - 12:03am
4. Steve - 12:04am
5. Steve - 12:05am
select distinct(username), created_at
from downloads
group by username, created_at
order by created_at desc limit 2
// Result SHOULD be
Steve - 12:05am
John - 12:03am
这是对的吗?有没有办法在不使用自定义查询的情况下使用ActiveRecord进行此查询?
答案 0 :(得分:3)
您需要按max(created_at)
订购,因为您希望用户最近下载
select username, max(created_at)
from downloads
group by username
order by max(created_at) desc
limit 2
username
已经是唯一的,因为您按该列进行分组,因此无需使用distinct
有效记录
Downloads
.select("max(created_at),username")
.group("username")
.order("max(created_at) desc")
.limit(2);