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
,这样新切片中的值就不会被遗忘
我目前正在使用 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
,这样新切片中的值就不会被遗忘