Задать вопрос
@FrieNze
web-разработчик

Сортировка по связующей таблице?

Всем привет!

Есть такие таблицы
companies
-id
-name

teams
-id
-name
-company_id

polls
-id
-team_id
-created_at

Вопрос такой, как получить все записи из таблицы companies отсортированные по polls.created_at без повторений.
Если у company есть несколько team, а у team несколько poll, должна возвращаться запись с самым последним poll

Пример вывода:

company.name | poll.created_at
Company 1 | 2019-01-01
Company 2 | 2019-02-02

Я пробовал делать через join, но как и предполагалось, выдаются дубликаты по company.name
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
LaRN
@LaRN
Senior Developer
А почему через join не вышло?
Можно так попробовать:

SELECT companies.name, max(polls.created_at)
  FROM polls
  JOIN teams
    ON teams.id = polls.team_id
  JOIN companies
    ON companies.id = teams.company_id
 GROUP BY companies.name
 ORDER BY 2
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
все записи из таблицы companies
SELECT companies.name, MAX(polls.created_at)
  FROM polls 
    INNER JOIN teams ON polls.team_id = teams.id
    RIGHT OUTER JOIN companies ON teams.company_id = companies.id
  GROUP BY companies.Name
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
TheRonCronix
@TheRonCronix
select company_name, poll_created_at
from
(
  select company.name as company_name, poll.created_at as poll_created_at,
    row_number() over (partition by company.name order by poll.created_at desc) as rn
  from ...
)
where rn = 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы