不同,在1个查询中排序

时间:2016-02-07 06:44:00

标签: sql ruby-on-rails postgresql activerecord

我有一个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进行此查询?

1 个答案:

答案 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);