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_at
和username
.
现在,我想为每个username
订购者获取第一个日志created_at
。
一种方法是为每个用户名运行以下查询:
log = Log.where("username = :username", username: username).order(:created_at).first
Run Code Online (Sandbox Code Playgroud)
但这显然会查询数据库很多次(等于用户名的数量)。有没有办法只做一个数据库查询?
另一个案例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)
归档时间: |
|
查看次数: |
2350 次 |
最近记录: |