sql - 1 次查询中的不同、顺序

标签 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 中进行此查询而不使用自定义查询?

最佳答案

您需要按 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/

相关文章:

sql - 将 XML 导入并分解为 SQL 表

SQL Postgres - 插入到不存在的地方

node.js - postgresql - 错误 : Connection terminated

postgresql - 使用 postgis 在 postgreSQL 上请求错误(返回多行)

sql - Multi-Tenancy 和 CodeFluent 实体设计

c# - T-SQL LIKE与ASP.net参数中的通配符

ruby-on-rails - Rails select_tag 字母顺序

ruby-on-rails - rails : How to restart sidekiq?

ruby-on-rails - belongs_to 关联的验证错误消息变得容易

postgresql - 在考虑时区的同时获取 PostgreSQL 中日期的记录数