Oracle SQL: предыдущий MAX болит во всех предыдущих кварталах - PullRequest
0 голосов
/ 26 октября 2018

Лучший метод, используемый для получения МАКСИМАЛЬНЫХ предыдущих баллов для каждого идентификатора во всех кварталах.

Дано:

    ID  QTR SCORE 
    21  1   3 
    21  2   5 
    21  3   3 
    21  4   3 
    41  1   2 
    41  2   2 
    41  3   4 
    41  4   2 

Ожидаемое:

    ID  QTR PREV_MAX_SCORE
    21  1   3   
    21  2   5   
    21  3   5   
    21  4   5   
    41  1   2   
    41  2   2   
    41  3   4
    41  4   4

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вы можете попытаться использовать оконную функцию MAX, чтобы сделать это.

CREATE TABLE T(
  ID int,
  QTR int,
  SCORE int
);


insert into t values (21,1,3); 
insert into t values (21,2,5); 
insert into t values (21,3,3); 
insert into t values (21,4,3); 
insert into t values (41,1,2); 
insert into t values (41,2,2); 
insert into t values (41,3,4); 
insert into t values (41,4,2); 

Запрос 1 :

SELECT t1.ID,
       t1.QTR,
       max(SCORE) over(partition by ID order by QTR) SCORE
FROM T t1

Результаты :

| ID | QTR | SCORE |
|----|-----|-------|
| 21 |   1 |     3 |
| 21 |   2 |     5 |
| 21 |   3 |     5 |
| 21 |   4 |     5 |
| 41 |   1 |     2 |
| 41 |   2 |     2 |
| 41 |   3 |     4 |
| 41 |   4 |     4 |
0 голосов
/ 26 октября 2018

Коррелированный подзапрос может использоваться как:

with tab(ID,QTR,SCORE) as
(
 select 21,  1,   3 from dual union all
 select 21,  2,   5 from dual union all
 select 21,  3,   3 from dual union all
 select 21,  4,   3 from dual union all
 select 41,  1,   2 from dual union all
 select 41,  2,   2 from dual union all
 select 41,  3,   4 from dual union all
 select 41,  4,   2 from dual
)
select t.id, t.qtr,
       ( select max(score) from tab where qtr <= t.qtr and id = t.id ) as prev_max_score
  from tab t;

Rextester Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...