Django Trunc 数据到 15 分钟

Django Trunc data to 15 minutes

我目前正在使用 Django 的 Truc 功能来聚合一天和一小时内的一些数据。

我想做同样的事情,但超过 15 分钟,而不是一个小时或一分钟,但我想不通。

这是我当前查询的示例:

data_trunc = data_qs.annotate(
   start_day=Trunc('date_created', 'minute', output_field=DateTimeField()))
   .values('start_day', 'content', 'device')

问题在于可以传递给 Trunc'minutes' 参数。据我所知,'hour''minutes' 之间别无选择。

如何将我的数据分组超过 15 分钟,并为数据分组提供更大的时间跨度?

我知道之后我可以手动完成此操作,但我真的很想让数据库为我执行此操作,因为要计算的数据集很大,而且这种方法是我迄今为止最有效的方法。
如果这是唯一的方法,尽管我乐于接受有关解决此问题的最有效方法的建议。

感谢您的帮助


编辑
我应该指定我不想使用原始 SQL 来执行此操作并坚持使用 Django ORM 或本机 Python.

嗯,

由于我不想继续使用 Postgres 函数并坚持使用 ORM,我最终手动截断了迭代所有项目的数据。

def trunc_minutes(raw_data, groupping=15):

truncated_arranged = []
current_slice = []
end_time = raw_data[0]['start_day'] + timedelta(minutes=groupping)

for d in raw_data:
    if d['start_day'] <= end_time:
        current_slice.append(d)
    else:
        truncated_arranged.append(current_slice)
        current_slice = [d]
        end_time = d['start_day'] + timedelta(minutes=groupping)

return truncated_arranged

这可能不是最快的方法,但它可以工作并且不需要原始 SQL。


编辑:在代码的else部分添加d,这样新切片中的值就不会被遗忘