Ниже приведен набор данных.
select * from temp_denserow;
c1 c2 c3 c4
103 1 3 1
204 1 3 2
102 1 3 3
304 1 1 3
203 1 2 1
104 1 2 2
300 3 1 2
201 1 2 2
301 2 1 4
302 2 4 4
303 1 4 3
101 1 3 2
202 1 2 3
Я использую teradata, где нет встроенной функции densirank ().
DENSE_RANK () OVER (PARTITION BY c3 ORDER BY c3, c4) AS new_dense_rank
Я пытался реализовать приведенный выше оператор, но не смог получить желаемый результат.
select emp.*,
(select count(distinct c3)
from temp_denserow emp2
where emp2.c3 = emp.c3 and
emp2.c4 >= emp.c4
) as "new_dense_rank"
from temp_denserow emp;
Ожидаемый результат:
301 2 1 4 3
304 1 1 3 2
300 3 1 2 1
202 1 2 3 3
104 1 2 2 2
201 1 2 2 2
203 1 2 1 1
102 1 3 3 3
204 1 3 2 2
101 1 3 2 2
103 1 3 1 1
302 2 4 4 2
303 1 4 3 1