Упорядоченный и в то же время отдельный

У меня есть такие таблицы, как эта

id sku
1  C 
2  B
3  C
4  A

Наконец, я хочу получить исходные данные вот так.

1 C
2 B
4 A

Сначала я использую distinct

 queryset = self.filter_queryset(queryset.order_by('sku').distinct('sku'))

Он изображает raw следующим образом,

4 A
1 C
2 B

Тогда теперь я хочу отсортировать это по идентификатору,

queryset = queryset.order_by('id')

Однако он выдает ошибку, подобную этой,

django.db.utils.ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("defapp_log"."sku") "d...

DISTINCT ON( ... ) не поддерживается MySQL, поэтому, я полагаю, вы используете PostgreSQL. Это нестандартная функция, реализованная PostgreSQL как расширение SQL.

https://www.postgresql.org/docs/current/sql-select.html#SQL-DISTINCT говорит:

Выражения DISTINCT ON должны совпадать с крайними левыми выражениями ORDER BY. Предложение ORDER BY обычно содержит дополнительные выражения, которые определяют желаемый приоритет строк в каждой группе DISTINCT ON.

Другими словами, это правильно, потому что столбец sku является крайним левым выражением в предложении ORDER BY.

SELECT DISTINCT ON (sku), id FROM ... ORDER BY sku, id;

Но это неверно:

SELECT DISTINCT ON (sku), id FROM ... ORDER BY id;

Это не соответствует правилу, описанному в документации, поскольку столбец sku отсутствует в предложении ORDER BY.

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