首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有连接和顺序的不同记录

带有连接和顺序的不同记录
EN

Stack Overflow用户
提问于 2014-02-23 15:23:49
回答 1查看 6K关注 0票数 10

我在UserDonations之间有一个简单的关系,因为一个用户有很多捐赠,而捐赠属于一个用户。我想做的是得到一份用户列表,是根据最近的捐款订购的。

我想做的是:

首先,我想得到uniq用户的总数,它正在按预期工作:

代码语言:javascript
复制
> 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表达式必须出现在选择列表中“:

代码语言:javascript
复制
> 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子句似乎有效:

代码语言:javascript
复制
 > 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条记录:

代码语言:javascript
复制
> _.size
 => 692

如何获得预期的结果数(384),同时也按捐款的created_at时间戳进行排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-23 15:58:31

试试这个:

代码语言:javascript
复制
User.select('users.*,MAX(donations.created_at) as most_recent_donation').
  joins(:donations).order('most_recent_donation desc').group('users.id')

我假设一个用户有许多捐赠,这将选择最近创建的捐赠,并选择不同的用户过滤他们的id。

不过,我还没有测试过这个。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21970153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档