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

Pee*_*ush 2 sql postgresql activerecord ruby-on-rails greatest-n-per-group

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

["id", "username", "event", "parameters", "extras", "created_at", "updated_at"]
Run Code Online (Sandbox Code Playgroud)

我有索引created_atusername.
现在,我想为每个username订购者获取第一个日志created_at

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

log = Log.where("username = :username", username: username).order(:created_at).first
Run Code Online (Sandbox Code Playgroud)

但这显然会查询数据库很多次(等于用户名的数量)。有没有办法只做一个数据库查询?

Erw*_*ter 5

另一个案例DISTINCT ON

SELECT DISTINCT ON (username) *
FROM   log
ORDER  BY username, created_at;
Run Code Online (Sandbox Code Playgroud)

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

细节:

Ruby / AR / Postgres 的类似答案:

如何执行原始 SQL:

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

Log.select("DISTINCT ON (username) *").order(:username, :created_at)
Run Code Online (Sandbox Code Playgroud)