Active Record时间序列查询:比较平均值

时间:2017-12-24 20:07:02

标签: sql ruby-on-rails postgresql activerecord

我想从我的时间序列表中提取metric_id,其中AVG列在过去4小时的时间段内比名称value更高。 24小时。我的数据库中有以下格式的时间序列:

row1 | metric_id: 1 | value: 22.2 | created_at: now
row2 | metric_id: 1 | value: 13.9 | created_at: now-1.hour

如何使用SQL(最好是在Active Record的帮助下)执行此类查询,该查询将对表执行AVG(value)操作,按最近4小时内创建的metric_id进行分组,以及会返回过去24小时内metric_id较小的所有AVG(value)吗?

我知道我可以使用过滤器的帮助:

 records =
 Record
  .select(:metric_id)
  .select("AVG(records.new_subscribers) FILTER (WHERE created_at between now() AND now() - interval '4 hours' AS four_hours")
  .select("AVG(records.new_subscribers) FILTER (WHERE created_at between now() AND now() - interval '1 day' AS one_day")
  .where("four_hours > one_day * 2.2")
  .group(:metric)

这真的有用吗?还有更好/更好的方法吗?

0 个答案:

没有答案