Поскольку вы, похоже, используете SQL Server 2005 или более новую версию, вы можете использовать CTE с функцией оконной обработки ROW_NUMBER()
:
;WITH LatestCargo AS
(
SELECT
cs.Id, -- identity
cs.CargoID,
cs.[Status] AS CurrentStatus
ROW_NUMBER() OVER(PARTITION BY cs.CargoID
ORDER BY cs.[Date], s.StatusStageNumber DESC) AS 'RowNum'
FROM
dbo.CargoStatus cs
INNER JOIN
STD.StatusMaster s ON cs.ShipStatusID = s.[StatusID]
)
SELECT
Id, CargoID, [Status]
FROM
LatestCargo
WHERE
RowNum = 1
Этот CTE "разбивает" ваши данные на CargoID
для каждого раздела функция ROW_NUMBER
выдает последовательные числа, начиная с 1 и упорядочивая по Date DESC
- так что последняя строка получает RowNum = 1
(для каждого CargoID
), что я выбираю из CTE в SELECTзаявление после него.