Вы можете использовать ROW_NUMBER()
и TOP (1) WITH TIES
для этого:
SELECT TOP (1) WITH TIES ca.*
FROM [FHF_MarketingData].[dbo].[FHF_Constituent_Appeals] ca
WHERE ca.[Assigned Appeal Category] = 'TELEMARKETING'
ORDER BY ROW_NUMBER() OVER (PARTITION BY [Constituent ID] ORDER BY [Assigned Appeal Date] DESC);
Это предполагает, что вы действительно имеете в виду для каждой составляющей, а не для каждой записи.
Другой метод, который может даже иметь лучшую производительность с правильными индексами:
SELECT ca.*
FROM [FHF_MarketingData].[dbo].[FHF_Constituent_Appeals] ca
WHERE ca.[Assigned Appeal Category] = 'TELEMARKETING' AND
ca.[Assigned Appeal Date] = (SELECT MAX(ca2.[Assigned Appeal Date])
FROM [FHF_MarketingData].[dbo].[FHF_Constituent_Appeals] ca2
WHERE ca2.[Constituent ID] = ca.[Constituent ID] AND
ca2.[Assigned Appeal Category] = ca.[Assigned Appeal Category]
);