Предполагая, что ваша СУБД знает оконные функции, а CTE и USER_ID - это идентификатор пациента:
WITH TT AS (
SELECT *, ROW_NUMBER() OVER(PARTITION BY USER_ID ORDER BY DOCUMENT_DATE DESC) AS N
FROM test_table
)
SELECT *
FROM TT
WHERE N = 1;
Я предположил, что вы хотите отсортировать по DOCUMENT_DATE, вы можете легко изменить его, если хотите.Если ваша СУБД не знает оконных функций, вам нужно выполнить объединение:
SELECT *
FROM test_table T1
INNER JOIN (SELECT USER_ID, MAX(DOCUMENT_DATE) AS maxDate
FROM test_table
GROUP BY USER_ID) T2
ON T1.USER_ID = T2.USER_ID
AND T1.DOCUMENT_DATE = T2.maxDate;
Было бы хорошо, если бы вы сообщили нам, что такое ваша СУБД.И этот запрос выбирает самую последнюю дату для каждого пациента, вы можете добавить условие для данного пациента.