Учитывая, что у меня есть следующая таблица "PriceRecord":
| PriceRecord_ID | Company_ID | Price | Tarif_type | Tarif_Model | ... attributes |
|:--------------:|:----------:|:-----:|:----------:|:----------:|:--------------:|
| 1 | A | 10 | tarif_1 | Model_1 | ... |
| 2 | A | 20 | tarif_2 | Model_1 | ... |
| 3 | A | 10 | tarif_3 | Model_2 | ... |
| 4 | B | 11 | tarif_1 | Model_2 | ... |
| 5 | B | 15 | tarif_2 | Model_3 | ... |
| 6 | C | 10 | tarif_1 | Model_4 | ... |
Моя цель - получить минимальную цену для каждой компании. Для каждой минуты (Цена) мне также нужны другие атрибуты (например, Tarif_type, Tarif_name).
Ожидаемый результат:
| PriceRecord_ID | Company_ID | Price | Tarif_type | Tarif_Model | ... attributes |
|:--------------:|:----------:|:-----:|:----------:|:----------:|:--------------:|
| 1 | A | 10 | tarif_1 | Model_1 | ... |
| 4 | B | 11 | tarif_1 | Model_1 | ... |
| 6 | C | 10 | tarif_1 | Model_2 |
Я знаю, как получить мин (цена) и группировать по компании. Моя проблема в том, что я не могу присоединиться к другим атрибутам (поскольку название компании не является уникальным ключом.
Я пробовал этот запрос (с намерением присоединиться к таблице, ЕСЛИ оба условия соблюдены -> к сожалению, он объединяется два раза для каждого условия, и у меня есть более одной записи для каждой компании в моей таблице результатов)
subquery = db.session.query(PriceRecord.company_id, db.func.min(PriceRecord.Price).label("minPrice")) \
.group_by(PriceRecord.company_id) \
.subquery()
result = db.session.query(subquery.c.company_id, subquery.c.minPrice, PriceRecord.tarif_type, PriceRecord.tarif_model) \
.join(PriceRecord, subquery.c.insurance_company==PriceRecord.company_id and subquery.c.minPrice==PriceRecord.Price) \
Я нашел это подобное решение, но не смог реализовать его для моего сценария.
Любая помощь высоко ценится! заранее спасибо