当前位置: 首页 > 面试题库 >

如何在Rails 3中按时间片(总,平均,最小,最大等)获取聚合数据

融宏伟
2023-03-14
问题内容

如何在Rails 3中创建按时间片聚合的活动关系查询?

我想建立一个查询,该查询每隔n分钟可以返回具有特定名称的计数器的每个样本的最小值,最大值,平均值,总和,计数。

create_table "samples"  
    t.integer  "counter_id"  
    t.string "name"  
    t.float    "value"  
    t.datetime "created_at"  
end

问题答案:

不幸的是,我从未使用过Postgres,因此该解决方案可在MySQL中使用。但是我认为您可以找到Postgres类似物。

class Counter < ActiveRecord::Base
  has_many :samples do
    # default 30 minutes
    def per_time_slice(slice = 30)
      start = "2000-01-01 00:00:00"
      self.select("*, 
                   CONCAT( FLOOR(TIMESTAMPDIFF(MINUTE,'#{start}',created_at)/#{slice})*#{slice},  
                     (FLOOR(TIMESTAMPDIFF(MINUTE,'#{start}',created_at)/#{slice})+1)*#{slice} ) as slice,
                   avg(value) as avg_value, 
                   min(value) as min_value, 
                   max(value) as max_value, 
                   sum(value) as sum_value, 
                   count(value) as count_value").
                   group("slice").order("slice")
    end
  end
end

用法

counter = find_some_counter
samples = counter.samples.per_time_slice(60).where(:name => "Bobby")
samples.map(&:avg_value)
samples.map(&:min_value)
samples.map(&:max_value)

等等



 类似资料:
  • 问题内容: 我正在使用内置的Django 1.9 和Postgres 9.4。在模型的json字段中,我存储带有一些值(包括数字)的对象。我需要汇总它们以找到最小/最大值。像这样: 另外,提取特定的密钥将很有用: 上面的查询失败了 FieldError:“无法将关键字’my_key’解析为字段。不允许加入’attrs’。” 有可能吗? 笔记: 我知道如何进行简单的Postgres查询来完成这项工作

  • 问题内容: 给出了一个由N个整数组成的非空零索引数组A。一对0(P <Q <N <N)的整数(P,Q)称为数组A的切片(请注意,切片包含至少两个元素)。切片的平均值(P,Q)是A [P] + A [P +1] + … + A [Q]的总和除以切片的长度。确切地说,平均值等于(A [P] + A [P + 1] + … + A [Q])/(Q − P +1)。 例如,数组A这样: 包含以下示例切片:

  • 我正试图找到一个子阵列最小切片的余数问题的解决方案,并且我已经设计了一个使用Kadane算法的修改版本的解决方案。我目前已经拿到了90/100,并且设法通过了O(n)的几乎所有考试。但是我好像过不了“medium_range,increasing,decreasing(legth = ~ 100)and small functional,got 5 expected 3”,我也不知道为什么。这可能

  • 在SQL中,如何按查询分组获取计数中的最小/最大日期? 查询: --这并没有给出文件的最小和最大接收日期 预期输出...与SourceId、Count、StartDate(最小值)、EndDate(最大值)一起

  • 问题内容: 我试图显示最高平均工资;但是,我似乎无法使其正常工作。 我可以得到要显示的平均薪水清单: 但是,当我尝试显示具有以下项的最大平均薪水列表时: 它没有运行。我收到“无效标识符”错误。如何使用每个工人的平均工资来找到每个工人的最高平均工资? 谢谢。 问题答案: 由聚合函数(例如avg)产生的列通常获得任意名称。只需为其使用别名,然后在其上进行选择:

  • 问题内容: 如何在Elasticsearch中计算最大和最小日期之间的小时数(最大和最小相同树级别)? 我的查询: 响应(简短)为 任何人都可以帮助我找出解决方案吗?提前致谢。 问题答案: 您可以利用管道聚合来计算每个存储区的最小值和最大值之间的差异。 只需在同一级别添加以下和: 对于上面的示例数据,在这种情况下,结果将为0.0175(即大约1分钟)