基本上,我想做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/