Есть несколько способов сделать это.Поскольку вам нужны только записи с максимальным значением ujo_job.job_ver
, вы можете либо рассчитать эту запись в CTE, либо сделать это в подзапросе.В зависимости от ваших данных, один может быть более производительным, чем другой.Вам придется проверить.
См. Мой Fiddle для настройки, которую я использовал ( db <> fiddle здесь ).Если ваши данные выглядят совершенно иначе, дайте мне знать, и я сделаю еще один удар.
ВЕРСИЯ CTE:
; WITH maxJobs AS (
SELECT j.joid, j.job_name, max(j.job_ver) as job_ver
FROM ujo_job j
GROUP BY j.joid, j.job_name
)
SELECT j2.job_name, c.command, c.job_ver, j2.job_ver
FROM ujo_command_job c
INNER JOIN maxJobs j2 ON c.joid = j2.joid
AND c.job_ver = j2.job_ver
WHERE c.command LIKE '%$$XI1134%'
job_name | command | job_ver | job_ver
:------------- | :--------------------------------- | ------: | ------:
XI113TEST4-J-3 | echo $$XI1134*-NXT-BUS-7D-TO-YYJJJ | 3 | 3
ВЕРСИЯ ДЛЯ ПОДПРОСКИ:
SELECT s1.job_name, c.command, c.job_ver, s1.job_ver
FROM ujo_command_job c
INNER JOIN (
SELECT j.joid, j.job_name, max(j.job_ver) as job_ver
FROM ujo_job j
GROUP BY j.joid, j.job_name
) s1 ON c.joid = s1.joid
AND c.job_ver = s1.job_ver
WHERE c.command LIKE '%$$XI1134%'
job_name | command | job_ver | job_ver
:------------- | :--------------------------------- | ------: | ------:
XI113TEST4-J-3 | echo $$XI1134*-NXT-BUS-7D-TO-YYJJJ | 3 | 3
Я также изменил ваше предложение WHERE
на LIKE
после первого бита, вместо подстановочного знака в начале.Если все ваши command
начинаются с "echo..."
, сделайте это, чтобы ускорить процесс.Если они могут начать с чего-то другого, оставьте в запросе подстановочный знак %
.
РЕДАКТИРОВАТЬ: Из-за новых комментариев OP, они могут иметь любой текстперед строкой поиска, поэтому я переключился на поиск с подстановочными знаками на обоих концах термина.Это потребует дополнительной обработки, поэтому, если начальный текст постоянен, оставьте его без начального подстановочного знака.