Как ограничить нет. последовательных объектов с определенным свойством в наборе запросов django?

У меня есть модель:

class Employee(models.Model):
    name = models.CharField(max_length=255)
    department = models.ForeignKey("Department", ...)
    ......
    ...

Вот набор запросов, который возвращает наиболее эффективных сотрудников компании, отсортированных по аннотированному полю score.

best = Employees.objects.filter(...some filters).annotate(score=...some calculations).order_by('-score')

Как ограничить набор запросов, чтобы он возвращал максимум 2 or n no. последовательных сотрудников с одним и тем же отделом?

текущий результат:(только полиграфический отдел ради экономии времени)

dep5, dep9, dep9, dep9, dep9, dep5, dep5, dep4, dep4, dep4

Ожидаемый результат: (только полиграфический отдел ради экономии времени)

dep5, dep9, dep9, dep5, dep5, dep4, dep4

Примечание.

Я провел свое исследование и не смог найти никакого решения. Пожалуйста помоги.


person whitehat    schedule 03.02.2020    source источник
comment
stackoverflow.com/questions/50120467/ использовать ROW_NUMBER с partition_by=department_id, аннотируйте его, например. rn и отфильтровать как rn <= 2   -  person Ivan Starostin    schedule 03.02.2020
comment
@IvanStarostin Предложение Window нельзя использовать с фильтром. q.annotate(row_number=Window(expression=RowNumber(), partition_by=[F('department')])).filter(row_number__lte=2).order_by('row_number', '-score')   -  person whitehat    schedule 03.02.2020