Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django查询集粒度_Python_Django - Fatal编程技术网

Python Django查询集粒度

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

假设我有一张每人每天都有一条记录的表格,记录了那个人当天摄入的总热量

现在假设Tom有30天的总热量记录,Dani有365天的总热量记录

我如何对Dani的卡路里历史记录运行Django查询集,获取卡路里读数,收集总共30条记录,每个记录间隔10天,这样,如果我对这两个人运行相同的代码,我将为他们两人都获得30条记录,而不是Tom的30条记录,Dani的365条记录

i、 e:我需要粒度,以防总记录数超过30。如果它超过30,我需要10天左右的粒度


我希望我的解释可以理解。

我可以通过编写自定义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查询。