我在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表达式必须出现在选择列表中“:
> 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错误,乍一看,SELECT子句似乎有效:
> 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如何获得预期的结果数(384),同时也按捐款的created_at时间戳进行排序?
发布于 2014-02-23 15:58:31
试试这个:
User.select('users.*,MAX(donations.created_at) as most_recent_donation').
joins(:donations).order('most_recent_donation desc').group('users.id')我假设一个用户有许多捐赠,这将选择最近创建的捐赠,并选择不同的用户过滤他们的id。
不过,我还没有测试过这个。
https://stackoverflow.com/questions/21970153
复制相似问题