@scotch18
Middle PHP Developer

Как получить последний подходящий результат при объединении таблиц?

У меня есть запрос:

SELECT org_name, docPublishDate, inn, kpp, contactEMail contactPerson, contactPhone, period_end, period_start 
FROM table1, table2
WHERE table2.customer_fullname LIKE table1.org_name AND table2.period_end LIKE '%2021%' LIMIT 100


По этому запросу к одной строчке таблицы 1, подходит множество строк таблицы 2. Как мне получить только 1 результат из таблицы 2, у которого будет наибольшее значение docPublishDate?
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ответы на вопрос 2
@VitalyChaikin
Вначале напиши запрос который из таблицы 2 делает результат "по одной строке, с наибольшим значением docPublishDate" типа
SELECT <Список полей>, MAX(docPublishDate) GROUP BY <Список полей>

Убедись что результат соответствует ожиданиям; Затем присоединяем результат LEFT JOIN-ом
SELECT <Список полей>
FROM table1
LEFT JOIN (<Запрос1>) AS Z ON table1.<поле> = Z.<поле>
WHERE <Условие ограничивающее финальную выборку>
Ответ написан
Комментировать
@mletov
SELECT*
FROM
(
SELECT org_name, docPublishDate, inn, kpp, contactEMail contactPerson, contactPhone, period_end, period_start,
            DENSE_RANK() OVER(ORDER BY docPublishDate DESC) AS rank
FROM table1, table2
WHERE table2.customer_fullname LIKE table1.org_name AND table2.period_end LIKE '%2021%' LIMIT 100
) AS t1
WHERE rank=1


Используйте DENSE_RANK или ROW_NUMBER, в зависимости от потребностей

Но это если ваш сервер БД поддерживает оконные функции.
Если MySql, то должна быть свежая версия.
Кстати, укажите в тегах, что там: MySql, MsSql, Oracle или что-то еще.
Ответ написан
Ваш ответ на вопрос

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

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