【发布时间】:2026-02-01 22:00:01
【问题描述】:
我在使用 prostgresql 和 django 时遇到了这个问题:
我有很多在某个日期在某个时间创建的事件,这些事件存储在日期时间字段 created 中。
- 我想根据
created字段的日期部分进行聚合。最简单的例子是:how many event are in each day of this month?。 -
created字段可识别时区。所以结果应该根据用户所在的时区而改变。例如,如果您在 2017 年 10 月 2 日 23:30 UTC 时间创建了 2 个事件,如果您从 UTC-1 查看它们,您应该在 10 月 3 日看到它们00:30,总数应添加到第 3 天。
我正在努力寻找一个适用于大量数据的解决方案。因此,每天都做 SQL 语句不是一种选择。我想要的东西可以翻译成:
SELECT count(*) from table GROUP BY date
现在我找到了解决第一部分问题的方法:
from django.db import connection
truncate_date = connection.ops.date_trunc_sql('day', 'created')
queryset = queryset.extra({'day': truncate_date})
total_list = list(queryset.values('day').annotate(amount=Count('id')).order_by('day'))
有没有办法添加 date_trunc_sql 函数应该使用的时区来计算日期?或者 date_trunc_sql 之前的一些其他函数,然后链接那个。
谢谢!
【问题讨论】:
标签: django postgresql orm