Mysql 无法选择按处创建的\u分组的行
我有一张桌子:Mysql 无法选择按处创建的\u分组的行,mysql,ruby-on-rails,activerecord,rails-activerecord,Mysql,Ruby On Rails,Activerecord,Rails Activerecord,我有一张桌子: +----+----------------------+---------------------+ | id | implemented_features | created_at | +----+----------------------+---------------------+ | 1 | 19 | 2013-07-18 04:10:12 | | 2 | 6 | 2013
+----+----------------------+---------------------+
| id | implemented_features | created_at |
+----+----------------------+---------------------+
| 1 | 19 | 2013-07-18 04:10:12 |
| 2 | 6 | 2013-07-18 04:10:12 |
| 3 | 26 | 2013-07-19 04:10:12 |
| 4 | 11 | 2013-07-19 04:10:12 |
| 5 | 1 | 2013-07-20 04:10:12 |
+----+----------------------+---------------------+
当我通过MySQL直接查询时,它可以完美地满足我的需要
select date(created_at) as date, sum(implemented_features) as sum from summaries group by date(created_at);
但当我尝试将此查询转换为ActiveRecord语法时,它会返回nil
2.0.0p0 :035 > Summary.select("date(created_at) as date, sum(implemented_features)").group("date(created_at)")
Summary Load (0.5ms) SELECT date(created_at) as date, sum(implemented_features) FROM `summaries` GROUP BY date(created_at)
=> #<ActiveRecord::Relation [#<Summary id: nil>]>
如您所见,两个示例中的最终查询都是相同的。
为什么它在ActiveRecord中不起作用
在我的Rails项目中使用Rails 4.0.0、Ruby 2.0、mysql db。我想你只是对控制台输出有点困惑 你是这么说的:
Summary.select("date(created_at) as date, sum(implemented_features)")...
因此,封装在ActiveRecord::Relation中的返回摘要实例没有任何常见的摘要属性:没有id、没有创建的、没有实现的等等。当您调用ActiveRecord对象上的inspect时,它希望向您显示对象内部的内容,这意味着它希望向您显示包含的数据库属性;您的摘要实例没有任何常规属性,因此您会看到类似的情况
不用担心,你选择的价值观确实存在。如果你说:
Summary.select(...).map(&:date)
您应该将datecreated_视为日期值。如果为sumimplemented_功能添加别名,则可以使用该别名作为方法名称来提取总和。我不熟悉ActiveRecord,但可能需要像在常规SQL查询中那样为sumimplemented_功能提供别名。您说这不起作用,但没有包括它的工作原理。你有错误吗?什么错误?您是否得到错误的结果?是否需要在活动记录的查询中包含id?Summary.selectid,datecreated\u at as date,…没关系,我现在明白你的意思了。为你写一个答案:@henrikhodne请看上面的代码。我得到了@Mike,不,我不需要来自其他行的id。我试过你的例子。得到