LINUX.ORG.RU

Выбор и джойн последних записей по двум полям (год+квартал) из бд

 , ,


0

1

Гуру СУБД, подскажите куда копать, запутался как джойнить последние n записей по двум полям :)

Рад любой помощи - как это делать, какие фунции использовать, как вообще в нормальных продуктах такое делают. Таблицы и связи делал сам, могу переделать если поможет.

Есть табличка с фирмами

company (id, name)
1, google
2, amazon

и табличка с оборотами этих фирм и композитным первичным ключом (company_id + year + quarter)

company_turnover (company_id, year, quarter, turnover)
1, 2024, 3, 100
1, 2024, 2, 90
2, 2023, 4, 20
2, 2023, 3, 30

Мне надо составить два запроса:

  1. К таблице company заджойнить данные по обороту за самый последний квартал последнего года которые есть в бд. Т.е. для каждой фирмы найти самый последний год/квартал и показать оттуда оборот, типа:
1, google, 2024, 3, 100
2, amazon, 2023, 4, 20

Я пробовал max, greatest, over, group by - и все они дают не совсем то что мне нужно - то берут макс год/квартал из всей таблицы а не для фирмы, то берут макс год и макс квартал а не их комбинацию и так далее.

  1. К таблице company заджойнить сумму оборотов за последние 4 квартала, типа:
1, google, 190
2, amazon, 50

Сюда я пока не совался пока с первым не разобрался, будет на десерт :)

ChatGPT дает много всего, но я в нем честно говоря не уверен. Он как-то как-будто переусложняет и не дает точно то что нужно мне.

★★★

а вы кстати в курсе, что сейчас 1-й квартал 25 года ? а 4-й 2024 уже закончился

и база то хоть какая ?

1) сферический селект: SELECT company_id,year,quarter,turnover FROM company_turnover GROUP BY company_id,year ORDER BY quarter LIMIT 1

2) по аналогии, но c SUM и будет счастье на зачёте :-)

PS мог ошибиться спросонок, но вроде бы так

PPS сопоставление с именем компашки добавьте сами - писать долго

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

а вы кстати в курсе, что сейчас 1-й квартал 25 года ? а 4-й 2024 уже закончился

Поэтому и условие что их надо брать из базы, не смотртя что сейчас на дворе. Ретроспектива так сказать :)

и база то хоть какая ?

Думал в тегах хватит упоминания что это постгрес :)

  1. сферический селект: SELECT company_id,year,quarter,turnover FROM company_turnover GROUP BY company_id,year ORDER BY quarter LIMIT 1

Логически тоже так пробовал, простой запрос нормально все выводит, а вот с джойном уже вопросы. Еще осложняется тем что потом это надо будет имплементировать в sqlalchemy :(

  1. по аналогии, но c SUM и будет счастье на зачёте :-)

Будем попробовать) Эх, сейчас бы назад в то время, когда надо было зачеты закрывать, а не решать реальные проблемы :))))

skyman ★★★
() автор топика
Последнее исправление: skyman (всего исправлений: 1)