具有连接和顺序的独特记录
我在User
和Donations
之间有一个简单的关系,即用户有很多捐赠,捐赠属于用户。 我想做的是获取最近捐赠订购的用户列表。
这是我正在尝试的:
首先,我想获得uniq用户的总数,这是按预期工作的:
> User.joins(:donations).order('donations.created_at').uniq.count (3.2ms) SELECT DISTINCT COUNT(DISTINCT "users"."id") FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id" => 384
接下来,当我删除count
方法时,出现“ORDER BY表达式必须出现在选择列表中”的错误:
> User.joins(:donations).order('donations.created_at').uniq User Load (0.9ms) SELECT DISTINCT "users".* FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id" ORDER BY donations.created_at PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list LINE 1: ...ON "donations"."user_id" = "users"."id" ORDER BY donations....
然后我尝试通过显式设置SELECT子句来修复Postgres错误,该子句乍一看似乎有效:
> User.select('DISTINCT "users".id, "users".*, "donations".created_at').joins(:donations).order('donations.created_at') User Load (17.6ms) SELECT DISTINCT "users".id, "users".*, "donations".created_at FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id" ORDER BY donations.created_at
但是,返回的记录数不考虑DISTINCT语句并返回692条记录:
> _.size => 692
如何根据捐赠的created_at时间戳排序,获得预期的结果数(384)?
试试这个:
User.select('users.*,MAX(donations.created_at) as most_recent_donation'). joins(:donations).order('most_recent_donation desc').group('users.id')
我想用户有很多捐款,这会选择最近创建的捐款,并选择按其ID过滤的不同用户。
我没有测试过这个。
- 在Rails中,无法为{“adapter”=>“postgresql”创建数据库,
- 防止双向同步进入无限循环
- ActiveRecord中的PostgreSQL jsonb字段属于关联
- 如何在数据库创建时安装Postgres扩展?
- Mountain Lion上的pg gem’0.14.0’失败了
- 本地postrges工作,但似乎无法推动到RAILS_ENV =生产heroku
- Rails + Postgres迁移 – 为什么我收到错误“PG :: UndefinedFunction:ERROR:function gen_random_uuid()不存在”?
- 为什么我无法使用rails 4.0.0.rc1(ruby 2.0)安装postgresql
- 所有在数组中的PostgreSQL