django - Django 2.0 中的 “greatest-n-per-group” 查询?

标签 django greatest-n-per-group

基本上,我想做this但是使用 django 2.0。

如果我尝试:
Purchases.objects.filter(.....).annotate(my_max=Window( expression=Max('field_of_interest'), partition_by=F('customer') ) )
我取回所有行,但使用 my_max添加到每个记录的属性。

最佳答案

如果您使用的是 PostgreSQL:

Purchases.objects.filter(.....).order_by(
    'customer', '-field_of_interest'
).distinct('customer')

更新:过滤器中不允许使用窗口表达式,因此以下方法不起作用。请引用this answer获取最新解决方案

或与 Window表达
Purchases.objects.filter(.....).annotate(my_max=Window(
    expression=Max('field_of_interest'),
    partition_by=F('customer')
    )
).filter(my_max=F('field_of_interest'))

但如果他们具有相同的 field_of_interest,后者可以为每个客户生成多行

另一个 Window , 每个客户单排
Purchases.objects.filter(.....).annotate(row_number=Window(
        expression=RowNumber(),
        partition_by=F('customer'),
        order_by=F('field_of_interest').desc()
        )
    ).filter(row_number=1)

关于django - Django 2.0 中的 “greatest-n-per-group” 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51140307/

相关文章:

python - Django 南 : detecting if fake migrations were applied in production

mysql - 我应该使用 Ruby 进行计算,还是应该使用 MySQL 进行计算?

sql - 如何使用 SQL 从每个组中获得最高得分球员?

django - 将消息从Celery任务发送到 channel

python - 微服务和多个数据库

带有 mod_wsgi 的 Django 返回 403 错误

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

python-3.x - Pandas 按两列分组,并获取按降序排序的其中一列的每个值的前 n 行

sql - 如何在Oracle中为每个id用户提取前5行?

Django:ORM 是否支持 SQL "IN"运算符?