Teradata - подсчет предыдущих значений - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь суммировать предыдущие значения в запросе в качестве промежуточного шага для выполнения другой задачи. Я хочу суммировать предыдущие значения 3, например

Type   value
A        3 
A        3
A        3
A        3
A        3
A        3
A        3
B        2.3
B        2.3 
B        3
B        2.3 
B        2.3 
B        3
B        2.3

и мои идеальные ответы будут

Type   value   Previous 3's
A        3             0
A        3             1 
A        3             2
A        3             3
A        3             4
A        3             5
A        3             6
B        2.3           7
B        2.3           7
B        3             7
B        2.3           8
B        2.3           8
B        3             8
B        2.3           9

Как бы я достиг этого в Teradata или SQL?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Таблицы SQL представляют неупорядоченные наборы. Для подсчета предыдущих значений вам нужен столбец, в котором указан порядок, а у вас его нет в вашем вопросе.

Вы можете использовать совокупный счет или сумму:

select t.*,
       count(case when value = 3 then 1) over
           (order by ? rows between unbounded preceding and 1 preceding)
from t;

? для столбца, определяющего порядок.

0 голосов
/ 02 июля 2018

Вы можете достичь этого хотя бы в MYSQL:

create table teadata(Type varchar(1), value number);
insert into teadata(Type, value) values('A', 3);
insert into teadata(Type, value) values('A', 3);
insert into teadata(Type, value) values('A', 3);
insert into teadata(Type, value) values('B', 3);
insert into teadata(Type, value) values('B', 2.3);

select type, value, (@sum := @sum + (case when value = 3 then 1 else 0 end)) as cumesum 
    from teadata t cross join (select @sum := 0) params;

Это напечатает:

+------+-------+---------+
| type | value | cumesum |
+------+-------+---------+
| A    |     3 |       1 |
| A    |     3 |       2 |
| A    |     3 |       3 |
| B    |     3 |       4 |
| B    |   2.3 |       4 |
+------+-------+---------+

Хитрость в этом случае заключается в использовании переменной @sum вместе с оператором case. Это работает на MySQL. Не уверен насчет Терадаты.

...