小编典典

获取每个组的第一条记录的列表

sql

我有一个Log包含以下各列的模型:

["id", "username", "event", "parameters", "extras", "created_at", "updated_at"]

我有索引created_atusername
现在,我想获取由username排序的每个对象的第一个日志created_at

一种方法是对每个用户名运行以下查询:

log = Log.where("username = :username", username: username).order(:created_at).first

但这显然会查询数据库很多次(等于用户名的数量)。有什么方法可以只执行一个数据库查询吗?


阅读 129

收藏
2021-04-28

共1个答案

小编典典

另一种情况DISTINCT ON

SELECT DISTINCT ON (username) *
FROM   log
ORDER  BY username, created_at;

返回每个“第一”条目 的整行username

这种Ruby语法应该可以工作:

Log.select("DISTINCT ON (username) *").order(:username, :created_at)
2021-04-28