【问题标题】:How to find count of records per week of given month in django 1.11?如何在 django 1.11 中查找给定月份每周的记录数?
【发布时间】:2018-05-09 02:55:21
【问题描述】:

我需要计算给定月份每周的记录数。 我使用如下查询获得了给定年份的每月计数

c = Cars.objects.filter(sold__year='2017').extra(select={'month':'extract(month from sold)'}).values('month').annotate(perMnth=Count('sold'))

如何查找给定月份的每周计数,例如“十一月”月份的周计数,例如 week1=10、week2=12、week3=5 等

【问题讨论】:

    标签: python django python-2.7 postgresql django-1.11


    【解决方案1】:

    我遇到了完全相同的问题(按任意时间段汇总),我最终还是使用了 pandas。

    pandas how to use groupby to group columns by date in the label?

    【讨论】:

    • 请检查我的答案,它可能会有所帮助。
    • 哦,谢谢!我不知道。但是,在我的情况下,我必须按用户指定的范围对记录进行分组,因此提取会更加困难。呵呵,还是不错的。
    【解决方案2】:

    您可以使用Extract 来执行此操作

    from django.db.models.functions import ExtractWeek
    from django.db.models import Count
    
    Cars.objects.annotate(
        week_num=ExtractWeek('sold')   # sets week number for each row
    ).values(
        'week_num'
    ).annotate(
        count=Count('week_num')
    )
    

    请注意,ExtractWeek 是在 django 1.11 中引入的,因此它不适用于旧版本

    【讨论】:

    • 但这给出了所有周的计数,我需要的是特定给定月份的周计数。例如 2017 年 11 月的每周计数。
    • 有什么方法可以获取给定月份的周数吗?
    • @user123 如果您想按月份过滤,只需在 `annotate 之前使用 filter(sold__month=num)
    • 是的,我尝试了过滤器 (sold__year=2017,sold__month=11),但显示的计数中存在总和不匹配。在 postgres 中,我从周一到周日、周日到周六、周一到周一等查询了相同的日期。但注释查询和 posgtres 查询显示不同的计数..我正在检查它..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2023-03-19
    • 2022-08-03
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多