Общий SQL-оператор, который запустил бы это:
select P.PartNum, M.Formula, M.RevisionNum
from Parts P
join Material M on P.PartNum = M.PartNum
where M.RevisionNum = (select max(M2.RevisionNum) from Material M2
where M2.PartNum = P.PartNum);
Повторение приведенных выше предостережений о том, что происходит после пересмотра № 26. Макс (RevisionNum) может сломаться в зависимости от того, что происходит после # 26.
EDIT:
Если последовательность RevisionNum всегда начинается с NEW и затем продолжается, A, B, C и т. Д., То max () необходимо заменить на что-то более сложное (и грязное):
select P.PartNum, M.RevisionNum
from Parts P
join Material M on P.PartNum = M.PartNum
where (
(select count(*) from Material M2
where M2.PartNum = P.PartNum) > 1
and M.RevisionNum = (select max(M3.RevisionNum) from Material M3
where M3.PartNum = P.PartNum and M3.RevisionNum <> 'NEW')
)
or (
(select count(*) from Material M4
where M4.PartNum = P.PartNum) = 1
and M.RevisionNum = 'NEW'
)
Должен быть лучший способ сделать это. Это работает, хотя - придется подумать о более быстром решении.
SQL Fiddle: http://sqlfiddle.com/#!3/70c19/3