А как насчет FIRST_VALUE / LAST_VALUE (и разделение окон в соответствии с идентификатором пользователя?):
SELECT DISTINCT
ID, NAME,
LAST_VALUE(Acct_CR_DT) OVER(PARTITION BY ID ORDER BY APP_START_DT NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
LAST_VALUE(App_Ap) OVER(PARTITION BY ID ORDER BY APP_START_DT NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
LAST_VALUE(APP_START_DT) OVER(PARTITION BY ID ORDER BY APP_START_DT NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
LAST_VALUE(APP_SUBMIT_DT) OVER(PARTITION BY ID ORDER BY APP_START_DT NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM table1 ap1
Для каждой строки мы находим «Последнее значение» каждого столбца для каждой пары идентификатор пользователя / имя.Нам нужен DISTINCT, чтобы удалить дублирующиеся записи, так как это «последнее значение» вычисляется для каждой строки (не только последней в каждой группе).
Если должно работать, если Вы можете гарантировать, будет только одна строкас APP_START_DT = MAX (APP_START_DT) OVER (идентификатор PARTITION BY) или, если таких строк больше, то они, по крайней мере, согласованы для выбранных столбцов.Если Вы не можете гарантировать это, я бы рассмотрел добавление дополнительных столбцов в предложения ORDER BY (какая строка должна быть первой).