Фильтр подгрупп в кверисетах 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 |
Я не могу написать набор запросов, который будет эффективно выполнять фильтрацию в одном запросе. Буду признателен за любые подсказки.