Фильтр подгрупп в кверисетах django
Рассмотрим следующую таблицу:
Column_A | Колонка_B | Колонка_C |
---|---|---|
Первый | ПользовательА | NULL |
Второй | UserB | NULL |
Третий | UserC | 1 |
Четвертый | ПользовательА | 1 |
Пятый | ПользовательВ | NULL |
Шестой | ПользовательВ | 2 |
Седьмой | ПользовательC | 2 |
Я хотел бы вернуть все строки (Column_A, Column_B, Column_C) такие, что либо:
- Column_C is NULL, or
- for every unique value in Column_C, return the first row with Column_B == UserA. If no such row exists, return the first row sorted by Column_B.time_created.
Например, table.objects.magic_queryset(matching_user(UserA)) возвращает
Column_A | Column_B (FK) | Column_C |
---|---|---|
Первый | ПользовательА | NULL |
Второй | UserB | NULL |
Fourth | UserA | 1 |
Пятый | ПользовательВ | NULL |
Шестой | ПользовательВ | 2 |
Я не могу написать набор запросов, который будет эффективно выполнять фильтрацию в одном запросе. Буду признателен за любые подсказки.