Python Django查询集粒度
假设我有一张每人每天都有一条记录的表格,记录了那个人当天摄入的总热量 现在假设Tom有30天的总热量记录,Dani有365天的总热量记录 我如何对Dani的卡路里历史记录运行Django查询集,获取卡路里读数,收集总共30条记录,每个记录间隔10天,这样,如果我对这两个人运行相同的代码,我将为他们两人都获得30条记录,而不是Tom的30条记录,Dani的365条记录 i、 e:我需要粒度,以防总记录数超过30。如果它超过30,我需要10天左右的粒度Python Django查询集粒度,python,django,Python,Django,假设我有一张每人每天都有一条记录的表格,记录了那个人当天摄入的总热量 现在假设Tom有30天的总热量记录,Dani有365天的总热量记录 我如何对Dani的卡路里历史记录运行Django查询集,获取卡路里读数,收集总共30条记录,每个记录间隔10天,这样,如果我对这两个人运行相同的代码,我将为他们两人都获得30条记录,而不是Tom的30条记录,Dani的365条记录 i、 e:我需要粒度,以防总记录数超过30。如果它超过30,我需要10天左右的粒度 我希望我的解释可以理解。我可以通过编写自定义s
我希望我的解释可以理解。我可以通过编写自定义sql来解决这个问题。对于博士后,我可以这样做
select * from
(select row_number() over(order by id) as row_num, *
from calorie
where user_id = 12345
order by id) as q
where row_num % ((select count(*)
from calorie
where user_id = 12345)/30) = 0
在这里,首先我向用户查询了整个查询,并给了他们行号
select row_number() over(order by id) as row_num, *
from calorie
where user_id = 12345
order by id
然后我找出了两行之间的距离:
((select count(*)
from calorie
where user_id = 12345)/30)
这是针对30行的,如果我得到的数据少于30行,它将抛出除法0。
然后我得到了唯一可以被行距离整除的行
row_num % row_distance = 0
你也可以使用抽样,这对我来说似乎更容易。也适用于行数小于30的情况
select *
from calorie
where user_id = 12345
order by random()
limit 30
至少您应该指向django文档,其中描述了如何编写原始SQL。你给出的答案与OP的要求无关,我真的不明白。提供一些更具体的例子。您所问的似乎更像是一个算法,而不是一个SQL查询。