我有一个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 中进行此查询而不使用自定义查询?
最佳答案
您需要按 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);
关于sql - 1 次查询中的不同、顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35250584/