我想从我的时间序列表中提取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)
这真的有用吗?还有更好/更好的方法吗?