【问题标题】:How to get maximum value of each day in month using django queryset如何使用 django 查询集获取每月每一天的最大值
【发布时间】:2022-01-10 12:01:30
【问题描述】:

假设我有 Model、Products 和 100k 条记录。现在我想通过月份2022-01-01 并获得过去月份每一天的maximum 价格。

产品型号

id     price     date
1.     33.33     2022-01-01
2.     93.33     2022-01-01
3.     64.33     2022-01-02
4.     34.33     2022-01-02
.
.
.
101.   43.33     2022-01-29
102.   74.33     2022-01-30
103.   36.33     2022-01-30

期待结果

93.33
64.33
.
.
.
43.33
74.33

抱歉,我无法更好地解释。

注意 我只想要查询集。请尽量避免循环。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您可以使用以下查询查询对象并每天最多注释:

    from django.db.models import Max
    
    Product.objects.filter(
        valuta_date__gte="startdate", valuta_date__lt="enddate"
    ).values("date").order_by("date").annotate(Max("price"))
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      from django.db.models import Max
      
      Product.objects.filter(
          my_date__year="2022", my_date__month="01"
      ).values('my_date').annotate(
        max_price=Max("price")
      ).order_by()
      

      但我建议在处理大型数据集时执行原始查询,因为它们的工作速度更快:

      max_product_query = """
          SELECT id, MAX(price), my_date FROM your_app_product 
          WHERE strftime("%Y-%m", my_date) = '{0}' GROUP BY my_date;
      """.format(year_month)
      
      products = Product.objects.raw(max_product_query)
      for product in products:
          # do something with the product
       
      

      上面的查询是sqlite的mysql和postgres使用如下:

      max_product_query = """
          SELECT id, MAX(price), my_date FROM your_app_product 
          WHERE EXTRACT(YEAR_MONTH FROM my_date) = '{0}' GROUP BY my_date';
      """.format(year_month)
      

      【讨论】:

        猜你喜欢
        • 2018-12-23
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        相关资源
        最近更新 更多