Вы не указали, какую именно базу данных и версию используете, но если вы используете SQL Server 2005 или более новую версию, вы можете использовать что-то вроде этого (CTE с функцией ранжирования ROW_NUMBER
) - I ' мы немного упростили это, так как я не знаю, какие еще таблицы есть у вас в select, которые никогда не отображаются ни в одном из списков столбцов SELECT .....
;WITH TopData AS
(
SELECT c.CustId, t.TreatmentDateTime,
ROW_NUMBER() OVER(PARTITION BY c.CustId ORDER BY t.TreatmentDateTime DESC) AS 'RowNum'
FROM
dbo.TreatmentFieldHstry t
INNER JOIN
dbo.Customer c ON c.CustId = t.CustId -- or whatever JOIN condition you have
WHERE
c.CustSer = Course.CustSer
)
SELECT
*
FROM
TopData
WHERE
RowNum = 1
По сути, CTE (Common Table Expression) разбивает ваши данные на CustId
и упорядочивает на TreatmentDateTime
(по убыванию - сначала самое новое) - и нумерует каждую запись последовательным номером - для каждого "раздела" (например, для каждого новое значение CustId
). При этом самая новая запись для каждого клиента имеет RowNum = 1
, что я и использую, чтобы выбрать ее из этого CTE.