Выбрать все столбцы из таблицы, в которой комбинация из 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
""")