微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django按小时分组

如何解决Django按小时分组

分为两步

objs = StoreVideoEventSummary.objects.filter(Timestamp__range=(start_time, end_time),
                                                   Customer__id=customer_id,
                                                   Store__StoreName=store)\
    .order_by("Timestamp")

def date_hour(timestamp):
   return datetime.datetime.fromtimestamp(timestamp).strftime("%x %H")

groups = itertools.groupby(objs, lambda x:date_hour(x.Timestamp))
#since groups is an iterator and not a list you have not yet traversed the list
for group,matches in groups: #Now you are traversing the list ...
    print group,"TTL:",sum(1 for _ in matches)

这使您可以根据几个不同的条件进行分组

如果您只想小时而不论日期如何,都可以更改 date_hour

def date_hour(timestamp):
   return datetime.datetime.fromtimestamp(timestamp).strftime("%H")

如果您想按星期几分组,则只需使用

def date_hour(timestamp):
   return datetime.datetime.fromtimestamp(timestamp).strftime("%w %H")

解决方法

我在Django中有以下模型。

class StoreVideoEventSummary(models.Model):
    Customer = models.ForeignKey(GlobalCustomerDirectory,null=True,db_column='CustomerID',blank=True,db_index=True)
    Store = models.ForeignKey(Store,db_column='StoreID',related_name="VideoEventSummary")
    Timestamp = models.DateTimeField(null=True,db_index=True)
    PeopleCount = models.IntegerField(null=True,blank=True)

我想找出每小时进入商店的人数。

为了实现这一点,我试图按小时将行分组,并对列Timestamp求和PeopleCount

store_count_events = StoreVideoEventSummary.objects.filter(Timestamp__range=(start_time,end_time),Customer__id=customer_id,Store__StoreName=store)\
        .order_by("Timestamp")\
        .extra({
            "hour": "date_part(\'hour\',\"Timestamp\")"
        }).annotate(TotalPeople=Sum("PeopleCount"))

这似乎并没有按小时对结果进行分组,它只是添加了一个新列TotalPeople,该列的值PeopleCount与查询集中的每一行的值相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。