не проверено
Вот как я бы это сделал:
начните с подзапроса, чтобы получить «самую последнюю» дату для каждого продукта:
select ProductNo, max(Date)
from ProductHistory
group by ProductNo
Затем вы должны присоединить этот результат к таблице ProductHistory, чтобы получить соответствующую «Транзакцию»:
select PH.ProductNo, PH.Transaction, PH.Date
from (
select ProductNo, max(Date)
from ProductHistory
group by ProductNo
) MaxPH
inner join ProductHistory PH
on PH.ProductNo = MaxPH.ProductNo
and PH.Date = MaxPH.Date
Наконец, присоединитесь к таблице Product, чтобы получить Product (имя)
select P.Product, P.ProductNo, PH.Transaction, PH.Date
from (
select ProductNo, max(Date)
from ProductHistory
group by ProductNo
) MaxPH
inner join ProductHistory PH
on PH.ProductNo = MaxPH.ProductNo
and PH.Date = MaxPH.Date
inner join Product P on P.ProductNo = PH.ProductNo
Вы также можете использовать номера строк с разделом, чтобы найти «последний».