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()