Как объединить эти 2 таблицы по дате с помощью ORM

У меня есть два набора вопросов -

A = Bids.objects.filter(*args,**kwargs).annotate(highest_priority=Case(*[
When(data_source=data_source, then Value(i))
for i, data_source in enumerate(data_source_order_list)
],
.order_by(
"date",
"highest_priority"
))

B= A.values("date").annotate(Min("highest_priority)).order_by("date")

Первый запрос дает мне все объекты с выбранным временным диапазоном с соответствующими источниками данных и значениями. Через highest_priority я устанавливаю, какой элемент должен быть выбран. Все объекты имеют дополнительные данные.

Второй запрос дает мне сгруппированную по элементам информацию о товарах за каждую дату. Во втором запросе у меня нет важных значений, таких как цена и т.д. Поэтому я предполагаю, что мне нужно объединить эти две таблицы и отфильтровать те, где a.highest_priority = b.highest priority. Потому что в этом случае я получу набор запросов с объектами и только один объект на дату.

Я пробовал использовать distinct - не работает с .first()/.last(). Annotates дает мне dict by grouped by, а группировка только по дате отсекает много важных данных, но мне нужно группировать только по дате...

Таблицы выглядят так

A A

B B

Как их объединить? Потому что когда я соединю их, я могу легко отфильтровать highest_prio с highest_prio и получить мою дату с помощью только одного снимка базы данных. Я хочу использовать ORM, потому что я могу просто отличить и поместить его в список, и я не хочу забивать базу соединением нескольких запросов через дату.

Посмотрите, работает ли это предложение :

 SELECT *  , (to_char(a.date, 'YYYYMMDD')::integer)*highest_priority AS prioritycalc;
FROM table A 
JOIN table B ON (to_char(a.date, 'YYYYMMDD')::integer)*highest_priority = (to_char(b.date, 'YYYYMMDD')::integer)*highest_priority 
ORDER BY prioritycalc DESC;
Вернуться на верх