Если я вас правильно понял, вы можете попробовать это:
SET DATEFORMAT DMY;
DECLARE @tbl TABLE(PatientID INT,DiseaseCode VARCHAR(10), DiseaseDate DATE);
INSERT INTO @tbl VALUES
(1,'xhd8','23-5-2006')
,(1,'nxhd','07-9-2013')
,(2,'kdeh','15-3-1998');
SELECT MostCurrenntDiabetes.*
FROM
(
SELECT TOP 1 WITH TIES t.*
FROM @tbl t
WHERE t.DiseaseCode IN('xhd8','nxhd')
ORDER BY ROW_NUMBER() OVER(PARTITION BY t.PatientID ORDER BY t.DiseaseDate DESC)
) AS MostCurrenntDiabetes
--WHERE MostCurrenntDiabetes.DiseaseCode='xhd8';
Использование SELECT TOP 1 WITH TIES
вместе с ROW_NUMBER() OVER(PARTITION BY ...)
вернет все строки с 1
в качестве ранга сортировки .Это означает, что вы получаете последний (самый младший) ряд для каждого пациента.
WHERE
во внутреннем SELECT
уменьшит количество строк для пациентов с любым кодом, связанным с диабетом (любой другой не будет отображатьсяв конце.
Финальный WHERE
вернет только этих пациентов, где младший код xhd8 . Я прокомментировал это, чтобы избежать пустого набора.
Может быть, вам нужно что-то еще ...