Вы можете попробовать запрос ниже. Он сопоставляет недавнего автора с последними данными книги для каждого ISBN.
;WITH CTE_Master AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY PaperID ORDER BY Version DESC) AS recentOrder
FROM Master
)
SELECT c.MasterId, c.PaperId, c.Version, c.PaperName, pa.AuthorName
FROM CTE_Master as c
CROSS APPLY
(SELECT TOP 1 MasterId, AuthorName From PaperAuthor WHERE MasterId <= c.MasterId ORDER BY MasterId Desc) as pa(MasterId,AuthorName)
WHERE c.recentOrder = 1
+----------+---------+---------+-----------------------+------------+
| MasterId | PaperId | Version | PaperName | AuthorName |
+----------+---------+---------+-----------------------+------------+
| 3 | ISBN-1X | 3 | Medical Research(2.1) | XYZ |
| 4 | ISBN-2X | 1 | Medical Research(2.1) | LMN |
+----------+---------+---------+-----------------------+------------+
ОБНОВЛЕНИЕ: Если вы хотите, чтобы авторы также были ПУСТОыми,
;WITH CTE_Master AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY PaperID ORDER BY Version DESC) AS recentOrder
FROM Master
)
SELECT c.MasterId, c.PaperId, c.Version, c.PaperName, pa.AuthorName
FROM CTE_Master as c
CROSS APPLY
(SELECT TOP 1 MasterId, AuthorName From PaperAuthor WHERE MasterId <= c.MasterId ORDER BY MasterId Desc) as pa(MasterId,AuthorName)
WHERE c.recentOrder = 1 and c.MasterId <= (SELECT MAX(MasterId) FROM PaperAuthor)
UNION ALL
SELECT c.MasterId, c.PaperId, c.Version, c.PaperName, NULL as AuthorName
FROM CTE_Master as c
WHERE c.MasterId > (SELECT MAX(MasterId) FROM PaperAuthor)
+---------+---------+---------+---------------------------+------------+
| asterId | PaperId | Version | PaperName | AuthorName |
+---------+---------+---------+---------------------------+------------+
| 3 | ISBN-1X | 3 | Medical Research(2.1) | XYZ |
| 4 | ISBN-2X | 1 | Medical Research(2.1) | LMN |
| 5 | ISBN-3X | 1 | Unpublished Research(0.0) | null |
+---------+---------+---------+---------------------------+------------+