Выбрать все столбцы из таблицы, в которой комбинация из 3 полей уникальна

Я пытаюсь выбрать все записи в таблице с несколькими столбцами, где комбинация из 3 определенных столбцов различна, используя django ORM с MySql backend.

id first_name last_name n_children some_stuff other_stuff дата
1 джон silver 2 любой любой 2021-01-01
2 джон silver 3 любой любой 2021-01-01
3 джон белый 2 некоторые some 2021-01-01
4 Джон silver 2 some some 2021-01-02

Мне нужно выбрать все строки, в которых комбинация "first_name", "last_name" и "n_children" уникальна, отдавая предпочтение самым последним записям. В данном примере результатом должны быть строки с id [2,3,4].

что я пробовал

qs = Table.objects.all().order_by('-date').annotate(
    unique_value=Concat('first_name','last_name','n_children', output_field=TextField())
).distinct('unique_value')

Но это не работает, потому что я использую mysql и получаю эту ошибку

django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database backend

На самом деле это невозможно сделать с помощью distinct(). И, вероятно, это невозможно сделать с помощью Django ORM. Попробуйте сделать это с помощью необработанного SQL:

Table.objects.raw("""
    SELECT * FROM table GROUP BY first_name, last_name, n_children ORDER BY date DESC
""")
Вернуться на верх