нужна помощь в построении подзапроса для ORDER BY через SqlAlchemy.
(внизу прикреплен скрин таблиц)
Логика:
1). Есть таблица со списком девайсов (“UECAP_DEVICE”)
2). Девайсы тестируются в лаборатории в трёх условиях:
- с фильтром (condition = “filter”)
- без фильтра (condition = “n_filter”)
- 5G условия (condition = “5g”)
Вторая таблица - это “UECAP_DEVICE_CONDITION”, имеет поля:
▸ device_id (ссылка (FK) на девайс из таблицы “UECAP_DEVICE”)
▸ binary_id (ссылка (FK) на HEX-код из таблицы “UECAP_BINARY”, который является результатом тестирования оборудования)
▸ uecap_analyze_id (ссылка (FK) на запись из таблицы “UECAP_ ANALYZE”, которая хранит результаты декодирования HEX-кода (характеристики девайса))
▸ condition (имеет одно из значений: “filter”, “n_filter”, “5g” и “combined”).
Сondition = “combined”, это условное состояние, которое просто нужно для хранения объединённых данных из вышеуказанных трех условий (“filter”, “n_filter”, “5g”), которые хранятся в таблице “UECAP_ ANALYZE”. И поэтому у “combined” нет ссылки на таблицу “UECAP_BINARY” (т. к. он не имеет HEX-кода).
3). И третья таблица — это “UECAP_ ANALYZE”.
Для “filter”, “n_filter” и “5g” — там хранятся результаты декодирования HEX-кода (характеристики девайса).
Для “combined” — там хранятся merged/агрегированные данные из трёх вышеуказанных состояний.
QUERY
По умолчанию отправляется запрос в БД, который включает данные из таблиц:
“UECAP_DEVICE” + “UECAP_DEVICE_CONDITION” (WHERE condition = “combined”) + UECAP_ ANALYZE (привязанная через FK к uecap_device_condition.condition = “combined”)
И они отсортированы по ID девайса.
Таким образом появляется список девайсов с merged информацией (для состояния “combined”).
Но мне нужно отсортировать список девайсов по двум вариантам:
1). длина (length) HEX-кода (таблица “UECAP_BINARY”, поле “UECAP_BIN”) из состояния condition = “5g”.
2). получаить максимальное значение длины HEX-кода для всех трёх состояний (“filter”, “n_filter”, “5g”) и уже по нему отсортировать список девайсов.
Например для некоторого девайса:
length(uecap_binary.uecap_bin) для “filter” = 100
length(uecap_binary.uecap_bin) для “n_filter” = 200
length(uecap_binary.uecap_bin) для “5g” = 300
Соответственно в сортировке девайсов будет учавствовать значение 300.