Я сделал рейтинг с помощью функции rank() OVER (PARTITION BY ? ORDER BY ? ASC)
. Работает нормально. Но мне нужно взять 1-е Falue, если max rnk определенного application_id
значения равно 1, в противном случае 2-й единица.
ТАБЛИЦА похож на это
APPLICATION_ID | EMP_CODE | DATE_ACTION | ACTION_ID
----------------------------------------------------------------
24744 | 110147 | 2016-09-13 | -1
24746 | 162286 | 2016-09-12 | 0
Мой выбор следующий:
SELECT APPLICATION_ID,EMP_CODE,DATE_ACTION,ACTION_ID,
rank() OVER (PARTITION BY APPLICATION_ID
ORDER BY DATE_ACTION ASC) as rnk
FROM TABLE WHERE ACTION_ID = -1
Результат:
RNK | APPLICATION_ID | EMP_CODE | DATE_ACTION | ACTION_ID
------------------------------------------------------------
1 | 53207 | 260829 | 2020-03-03 | -1
2 | 53207 | 161938 | 2020-03-03 | -1
3 | 53207 | 161938 | 2020-03-03 | -1
1 | 51372 | 163668 | 2020-03-04 | -1
1 | 52819 | 260829 | 2020-03-02 | -1
2 | 52819 | 161938 | 2020-03-02 | -1
3 | 52819 | 161938 | 2020-03-02 | -1
4 | 52819 | 161938 | 2020-03-02 | -1
Но результат должен быть таким:
RNK | APPLICATION_ID | EMP_CODE | DATE_ACTION | ACTION_ID
------------------------------------------------------------
2 | 53207 | 161938 | 2020-03-03 | -1
1 | 51372 | 163668 | 2020-03-04 | -1
2 | 52819 | 161938 | 2020-03-02 | -1