Rails 在日期范围内获得相等的细分

Rails get equal segments in between a date range

我有一个产品型号和与该产品关联的订单。我想分析从产品创建到当前时间的所有订单。我想优化,我会以当天创建的产品和当前时间作为起点和终点。下一步是在开始时间和当前时间之间自动提取 10 个等间隔时间,并将它们放入一个数组中。对于这些日期中的每一个,查询提供的 10 个日期的订单。

问题是,这是分析订单数据/查询性能的最佳方法吗?如果是这样,您如何在 Rails.

中的创建时间范围和当前时间范围之间提取 10 个日期

我有以下伪代码--

Products.where(event_id: event)[Products.where(event_id: event).first.created_at.to_i..Time.now.to_i)].each_slide(10) do |p|
  # Loop through orders of the 10 pulled days
  Orders.where(product_id: p.id).each do |o|
    # Add products to one of the 10 pulled days
  end
end

示例伪代码:

1st 获取最后一个产品的 created_at 值

require 'date'
prod_date = Products.where(event_id: event).last.created_at
prod_date = prod_date.to_time.strftime("%Y-%m-%d %H:%M:%S")

2nd 根据 prod_date & date_today 获取产品 table 中的最后 10 条记录.

date_today = DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
Products.where('event_id ? AND (created_at BETWEEN ? AND ?)',  event, prod_date, date_today).limit(10)

如果需要,您也可以通过添加例如.order("created_at DESC")

第 3 次开始迭代您从上面的结果中订购数据。

Orders.where(product_id: p.id).each do |o|
   # Add products to one of the 10 pulled days
end

====================================

我明白要你打算做什么。老实说,我还没有尝试过。 但是,我的想法是,例如。你有 10 个数据并且你想得到 3 个等距值。

为什么不尝试将它迭代 3(但得到第一个值)。

Imagine this is your data: 1 2 3 4 5 6 7 8 9 10

get the first = 1
iterate the next by (3) = 4, 7, 10
Result = 1, 4, 7, 10

您可能需要获取 第一个和最后一个数据 ,取决于有多少

3 equally spaced values

您想从总结果数中获取。