Задать вопрос
Jetstorm
@Jetstorm

Убрать другие строки из джоина?

Запрос ниже выполняется долговато
select * from tableA a
left join lateral(
select * from tableB b
where b.id_ref=a.id
order by
date1 desc,
id desc
limit 1
) as bb on bb.id_ref=a.id
where bb.str like '3465672345'

Переделал на такой запрос
select * from tableA a
left join (
select * from tableB b
order by
date1 desc,
id desc
) as bb on bb.id_ref=a.id
where bb.str like '3465672345'

Он выполняется быстро, но мешают другие строки из bb которые джоинятся по id_ref, а мне бы нужна только одна строка с max(date1)?
  • Вопрос задан
  • 34 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Lord_of_Rings
@Lord_of_Rings
Северный странник. Злой, но добрый
Вроде бы так:
WITH ranked_b AS (
    SELECT
        b.*,
        ROW_NUMBER() OVER (PARTITION BY b.id_ref ORDER BY b.date1 DESC, b.id DESC) as rn
    FROM
        tableB b
)
SELECT
    a.*,
    bb.*
FROM
    tableA a
LEFT JOIN
    ranked_b bb
ON
    bb.id_ref = a.id AND bb.rn = 1
WHERE
    bb.str LIKE '3465672345';
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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