0
(背景:我试图在一系列cameraapis中查找活动的“高峰”小时,定义为开始和结束日期在1之间的项目最多(从小时开始)例如,1:00到2:00在该时间范围内可能有8个条目,但2:00到3:00有12个条目 - 所以我想让它返回12输入时间范围)。为PostgreSQL的组中的某个选择获取对应的值
我无法从组的SELECT查询中获取关联数据。下面是代码:
def reach_peak_hour_by_date_range(start_date, end_date)
placement_self_device_id = self.device_id
query = <<-SQL
SELECT max(y.num_entries) AS max_entries
FROM
(
SELECT x.starting_hour, count(*) AS num_entries
FROM
(
SELECT date_trunc('hour', visitor_start_time) starting_hour
FROM Cameraapis WHERE device_id = '#{placement_self_device_id}'::text AND visitor_start_time > '#{start_date}'::timestamp AND visitor_end_time < '#{end_date}'::timestamp
) AS x
GROUP BY x.starting_hour
) AS y
SQL
results = Placement.connection.execute(query)
binding.pry
end
Cameraapi有一个DEVICE_ID,visitor_start_time和visitor_end_time,在代码中引用。
此代码在1小时内成功返回max_entries,但我无法弄清楚要将关联的start_hour选择到该max_entries。因为它是一个组,所以它需要聚合函数,而实际上我并不需要这些函数。有什么建议?
你有没有考虑把这部分到红宝石? –
你的问题需要更多的上下文,现在解码有点困难。但是为什么不在你的select语句中使用聚合函数:array_agg(expression)来提取你需要的id? – charlysisto