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
您想从总结果数中获取。
我有一个产品型号和与该产品关联的订单。我想分析从产品创建到当前时间的所有订单。我想优化,我会以当天创建的产品和当前时间作为起点和终点。下一步是在开始时间和当前时间之间自动提取 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
您想从总结果数中获取。