我有一个Log包含以下各列的模型:
Log
["id", "username", "event", "parameters", "extras", "created_at", "updated_at"]
我有索引created_at和username。 现在,我想获取由username排序的每个对象的第一个日志created_at。
created_at
username
一种方法是对每个用户名运行以下查询:
log = Log.where("username = :username", username: username).order(:created_at).first
但这显然会查询数据库很多次(等于用户名的数量)。有什么方法可以只执行一个数据库查询吗?
另一种情况DISTINCT ON:
DISTINCT ON
SELECT DISTINCT ON (username) * FROM log ORDER BY username, created_at;
返回每个“第一”条目 的整行username。
这种Ruby语法应该可以工作:
Log.select("DISTINCT ON (username) *").order(:username, :created_at)