Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Ранжирование без аналитических функций.  [new]
vgpframed
Member

Откуда:
Сообщений: 16
Доброго времени суток, дорогие форумчане!
Подскажите, пожалуйста, как можно ранжировать записи без аналитических функций, но чтобы ранг работал как функция rank(), а не dense_rank()?
13 июн 19, 12:52    [21907857]     Ответить | Цитировать Сообщить модератору
 Re: Ранжирование без аналитических функций.  [new]
Elic
Member

Откуда:
Сообщений: 29977
Скалярный агрегатный count с корреляцией по <= (>=)

RTFM
13 июн 19, 12:54    [21907865]     Ответить | Цитировать Сообщить модератору
 Re: Ранжирование без аналитических функций.  [new]
vgpframed
Member

Откуда:
Сообщений: 16
Elic,
Спасибо Вам! Извините за постановку вопроса, я новичок((.
13 июн 19, 12:59    [21907875]     Ответить | Цитировать Сообщить модератору
 Re: Ранжирование без аналитических функций.  [new]
vgpframed
Member

Откуда:
Сообщений: 16
vgpframed,
Более подробно.. есть запрос.. который работает как dense_rank(), а мне нужно, чтобы он работал как rank().
select q.acc, q.amt, q.dt, count(distinct q1.dt)+1 rn
from tb q left join tb q1
on q.acc=q1.acc and q.dt<q1.dt
group by q.acc, q.dt, q.amt
order by acc,dt desc;
13 июн 19, 13:03    [21907879]     Ответить | Цитировать Сообщить модератору
 Re: Ранжирование без аналитических функций.  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2772
vgpframed,

дистинкт лишний

  1  select deptno,ename,job
  2  ,rank() over (partition by deptno order by job) r
  3  ,(select count(*) from emp e2 where e2.deptno=e.deptno and e2.job<e.job)+1 rs
  4* from emp e
SQL> /

    DEPTNO ENAME      JOB                R         RS
---------- ---------- --------- ---------- ----------
        10 MILLER     CLERK              1          1
        10 CLARK      MANAGER            2          2
        10 KING       PRESIDENT          3          3
        20 SCOTT      ANALYST            1          1
        20 FORD       ANALYST            1          1
        20 ADAMS      CLERK              3          3
        20 SMITH      CLERK              3          3
        20 JONES      MANAGER            5          5
        30 JAMES      CLERK              1          1
        30 BLAKE      MANAGER            2          2
        30 MARTIN     SALESMAN           3          3
        30 WARD       SALESMAN           3          3
        30 ALLEN      SALESMAN           3          3
        30 TURNER     SALESMAN           3          3

14 rows selected.


.....
stax
13 июн 19, 13:14    [21907896]     Ответить | Цитировать Сообщить модератору
 Re: Ранжирование без аналитических функций.  [new]
vgpframed
Member

Откуда:
Сообщений: 16
Stax,
Огромное спасибо!Выручили:)
13 июн 19, 13:39    [21907926]     Ответить | Цитировать Сообщить модератору
 Re: Ранжирование без аналитических функций.  [new]
-2-
Member

Откуда:
Сообщений: 15330
  1  select deptno,ename,job
  2  ,rank() over (partition by deptno order by job) r
  3  ,(select count(*) from emp e2 where e2.deptno=e.deptno and e2.job<e.job)+1 rs
 +3  ,(select rank(e.job) within group (order by job) from emp where deptno = e.deptno) безанала
  4* from emp e
13 июн 19, 14:17    [21907953]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить