Django ORM Получение первой строки для каждой группы

Я хочу иметь возможность получить первую строку каждой группы типа id &, я приведу пример :

Type  Id   terms   data_signed   is_agreed
----------------------------------------
BUY   1     31      20-01-01         Y
BUY   1     12      19-01-01         Y
BUY   3     99      20-01-01         N
SELL  2     42      19-01-01         N
SELL  2     15      20-01-01         Y
SELL  2     87      20-01-01         Y

Я хочу, чтобы результат был

Type  Id   terms   data_signed   is_agreed
----------------------------------------
BUY   1     31      20-01-01         Y
BUY   3     99      20-01-01         N
SELL  2     42      19-01-01         N

записи уже упорядочены по типу>id Я просто хочу получить первую строку каждого типа&значения поля

не могу использовать distinct(), так как использую litesql,

у вас есть идеи?

Каков желаемый порядок внутри каждой группы? В вашем примере он непоследователен. Без этого невозможно определить, что в таблице является "первым":

Однако, если вы можете выбрать третье поле для упорядочивания, то вы можете использовать оконные функции , которые поддерживают sqlite и postgresql. В этом примере предполагается, что ваша модель Entry, а поле, по которому следует упорядочить каждую группу, terms

from django.db.models import F, Min, Window

Entry.objects.annotate(
    lowest_terms=Window(
        expression=Min('terms'),
        partition_by=[F('type'), F('id')],
        order_by=F('terms')
    )
).filter(lowest_terms=F('terms'))

Наглядно и не совсем то, для чего предназначены оконные функции, но это должно работать

Примечание: если ваша живая среда использует postgres, вы должны попытаться настроить вашу среду разработки с сервером postgres и использовать distinct()

Вернуться на верх