Tag: group by

RoR Postgresql时区组不在Heroku上工作

我希望我的报告在CST中显示,而我的数据库是UTC。 为此,我需要能够按时间列进行分组并让db进行时区转换。 这适用于我的dev postgresql框: offset = -5 result = ActiveRecord::Base.connection.execute(“select date(srl.created_at AT TIME ZONE ‘#{offset.to_s}’) AS date, count(*) from server_request_logs srl where srl.created_at between ‘#{@from.to_s(:db)}’ and ‘#{@to.to_s(:db)}’ group by date(srl.created_at AT TIME ZONE ‘#{offset.to_s}’)”) 在heroku上它出错了: ActiveRecord::StatementInvalid: PGError: ERROR: time zone “-5” not recognized 它也没有使用像’America / Winnipeg’这样的TZInfo名称或者来自http://www.postgresql.org/docs/7.2/static/timezones.html的 ‘CST’支持的时区。 有没有人能够使这个工作?

从复杂的Join,Sum和Group查询中调用ActiveRecord友好代码

问题 你好, 我没有运气试图将这个SQL语句分解为ActiveRecord / Rails友好代码,我想学习如何在这种情况下避免使用find_by_sql语句。 场景我有用户在执行操作时创建审核。 每次审核都是特定的audit_activity。 根据score_weight,每个audit_activity值得一定数量的积分。 我需要根据他们累计的audit_activity score_weights找到每个用户的总分。 最终我需要对它们进行排名,这意味着也要对它进行排序。 我的代码这是我的sql和有问题的表的简化版本。 有什么想法吗? 带有完整列名的SQL(为清楚起见) SELECT users.id, u.email, SUM(audit_activity.score_weight) FROM users JOIN audits ON users.id = audits.user_id JOIN audit_activities ON audit_activities.id = audits.audit_activity_id GROUP BY users.id; 模型:用户,审计,AuditActivity 用户字段:id,email class User < ActiveRecord::Base include Clearance::User has_many :audits end 审计字段:id,user_id,audit_activity_id class Audit < ActiveRecord::Base belongs_to :user belongs_to :audit_activity […]

如何查找查询结果的大小

我在rails中有以下查询: records = Record.select(‘y_id, source’) .where(:source => source, :y_id => y_id) .group(:y_id, :source) .having(‘count(*) = 1’) 如果我puts records我会得到以下输出: [#, #] 这看起来像输出数组中有2个元素。 但是当我尝试做records.size我得到: {[10000009, “XYZ”]=>1, [10000070, “XYZ”]=>1} 当records是一个包含2个元素的数组时,为什么records.size不会打印2 ? 由于某种原因group by查询结果group by行为是否有所不同? 我该怎么做才能获得records的大小

GROUP_BY内的活动记录限制

SCENARIO我有一张桌子,上面有一张带有用户表的post。 我希望能够获取所有post并将其分组给用户,但我想为每个用户设置10个限制。 class Post < ActiveRecord::Base belongs_to :user end class User 10).group_by(&:user) 有什么想法吗? 我是否必须编写自定义SQL,或者Active Record可以执行此操作吗?

Rails – Enumerable Group_By多个关联

我想通过他们有许多关系对一组对象进行分组……就像这样 s.inventoryitems.group_by{|i| i.locations} 为了简单起见,这返回给我这样的东西: {[1, 2, 3]=>[“a”], [2]=>[“b”, “c”], []=>[“d”]} 我正在寻找这样的结果: {[1] => [“a”], [2] => [“a”,”b”,”c”], [3] => [“a”], [] => [“d”]} 我正在努力重组事情所以这一切都可以用更直观的DB和模型关联方式完成,但与此同时我需要立即实现这个并且需要用一些Ruby来解决它并且我不确定。 谢谢你的帮助!

从数据库中选择,分组和求和结果

我有一个数据库,其中包含一些我要总结的字段。 但这不是大问题,我想按照它们创建的月份对这些字段进行分组。 ActiveRecord自动创建了一个名为“created_at”的字段。 所以我的问题; 如何按月对结果进行分组,然后对每个月的字段求和? 更新了代码 @hours = Hour.all(:conditions => “user_id = “+ @user.id.to_s, :group => “strftime(‘%m’, created_at)”, :order => ‘created_at DESC’) 这是我现在的代码。 管理按月分组,但不能总结我的两个字段,“分钟”和“薪水”我需要总结

Rails 4 where,order,group,count包括零 – postgresql

这是我的查询: User.where(“created_at >= ? AND created_at <=?", date1,date2).order('DATE(created_at) DESC').group("DATE(created_at)").count 我输出为: {Thu, 15 May 2014=>1} 但我想在剩下的时间里将输出设为0。 对于前者 {Thu, 15 May 2014=>1,Fri, 15 May 2014=>0} 我想得到的是在date range创建的Users , grouped created_at ordered和grouped ,以及每天的此类Users数。 如果特定日期没有用户,则应返回0,当前查询不返回。

计算月统计

我有一个捐款表,我正在尝试计算每个月的总金额。 没有任何捐款的几个月,我希望结果返回0。 这是我当前的查询: Donation.calculate(:sum, :amount, :conditions => { :created_at => (Time.now.prev_year.all_year) }, :order => “EXTRACT(month FROM created_at)”, :group => [“EXTRACT(month FROM created_at)”]) 返回: {7=>220392, 8=>334210, 9=>475188, 10=>323661, 11=>307689, 12=>439889} 任何想法如何抓住空虚的月份?

如何对活动供稿中的类似商品进行分组

对于社交网站,我有来自您关注的人的活动活动,我想在短时间内将类似类型的活动分组在一起,以获得更紧凑的活动供稿。 想象一下,当你快速接受几件事时,Facebook如何显示逗号分隔列表:’乔喜欢啤酒,足球和筹码。’ 我理解在ActiveRecord Enumerable结果上使用group_by方法,但是需要完成一些初始工作,填充我之后可以分组的属性。 我的问题涉及以可以标记这些分组的方式存储活动数据,然后再次检索它们。 现在我有一个Activity模型,它是提交活动的用户和它链接到的项目之间的连接关联(在上面的例子中,假设’beer’,’football’和’chips’是a的记录喜欢模特)。 除了“喜欢”之外还有其他活动类型(活动,保存collections夹等)。 我正在考虑的是,在创建此关联时,会在完成该类型的最后一次关联时进行检查,如果超过某个时间段,则会增加一个“活动块”计数器,这是一部分活动模型。 稍后,在渲染此活动Feed时,我可以按用户分组,然后键入,然后键入此活动块。 示例:假设在同一天内进行了2次更新。 用户在2:05喜欢2件事,之后在5:45喜欢3件事。 在第三次更新(第二个块的开始)发生在5:45之后,模型检测到已经过了太多时间并且将其活动块计数器递增1,从而在通过以下方式呈现新块时强制执行任何后续更新。 group_by电话: 2:05 Joe likes beer nuts and Hooters. 5:45 Joe likes couches, chips and salsa. 7:00 Joe is attending the Football Viewing Party At Joe’s 我的第一个问题:增加这样一个计数器的有效方法是什么? 它不再是auto_increment,所以我能想到的最简单的事情就是将最后一条记录作为参考点。 但是,这不能来自在上次更新该类型时检查的同一查询,因为稍后更新另一种类型可能已经收到下一个计数器值。 它们不一定是全球唯一的,但那会很好。 我想到的另一个整体策略是另一个名为ActivityBlock的模型,它将类似活动的组合在一起。 在许多情况下,更新将自行隔离,因此为每个单独的活动创建一条记录似乎效率不高。 这些中的任何一个看起来都是一个可靠的策略 我的最后一个问题围绕着分页。 既然我们正在处理块,那么在分页开始之前总是显示一定数量的条目就更难了。单个(隔离的)Activity更新或者当时的块应该只计为1,所以最低我的group_by的一层,我可以合并一个计数器来跟踪我显示的行数,但这意味着我不能再进行一次数据库查询,只需指定一个限制语句。 在我达到页面限制之前,有没有办法在不重复执行其他SQL查询的情况下仍然可以执行此操作? 这将是ActivityBlock模型方法的一个优点,因为我可以轻松地对其应用限制调用,并且块也可以包含自动增量计数器。

rails – 按天和小时分组

我想创建一个每天每小时创建的项目数组。 我正在追踪人们的感受,因此我的模型被称为TrackMood它只有一个名为mood和时间戳的列。 如果我做 TrackMood.where(mood: “good”).group(“hour(created_at)”).count 我得到类似{11 => 4,12 => 2,13 => 2,15 => 1}的东西 我这里有2个问题 1如何将这一天添加到此中,以便它不仅仅将昨天11点创建的项目添加到今天11点添加的项目中? 2当没有创建任何内容时,如何确保它显示0小时?