Итоговая сумма с условием и всегда с учетом предыдущего значения - PullRequest
0 голосов
/ 14 мая 2019

Я хочу внести последовательную сумму в таблицу с учетом нескольких дополнительных условий.Нам нужно убедиться, что когда сумма берется последовательно, так что если идентификатор имеет +40, то следующая сумма будет 130, если следующая равна +1, сумма будет еще 130, теперь, если следующая равна -1, тосумма должна быть 129. 100 должно быть добавлено к сумме в первый раз, и оттуда только счет должен быть добавлен в зависимости от условия.Нам нужно даже ограничить минимальное значение суммы, чтобы оно не могло быть меньше 70

. Я пробовал запрос ниже, но, похоже, он не смотрит на предыдущее значение.

Примерчто я пробовал:

create table tableA (id int not null, count int not null);  
insert into tableA(id, count) values(1,11), (2,21),(3, -3); -- case 1  
insert into tableA(id, count) values(1,35), (2,-3); -- case 2
insert into tableA(id, count) values(1,-45),(2,67); -- case3

Запрос пытался:

 select t.id, t.count,
 case when (100+(select ifnull(sum(count),0) from tableA x where x.id <= t.id)) >= 130 then 130
      when (100+(select ifnull(sum(count),0) from tableA x where x.id <= t.id)) <= 70 then 70
      else (100+(select ifnull(sum(count),0) from tableA x where x.id <= t.id))     
 end  as xxxx
 from tableA t;

Я ожидаю, что мой вывод будет выглядеть так:

Case1 Результат:

id  count   Sum
1   11      111
2   21      130
3   -4      126

Case2 Result:

id  count   Sum
1   35      130
2   -3      127

Case3 Result:

id  count   Sum
1   -45     70
2   67      137

1 Ответ

1 голос
/ 14 мая 2019

ЭТО ОТВЕТЫ НА ОРИГИНАЛЬНУЮ ВЕРСИЮ ВОПРОСА.

Я думаю, что это то, что вы хотите:

select a.*, (@sum := least(@sum + count, 130)) as "sum"
from (select a.*
      from tablea a
      order by a.id
     ) a cross join
     (select @sum := 0) params;

Я не понимаю, откуда 100. Это не часть вашего объяснения.

Здесь - это скрипта db <>, которая иллюстрирует, как это работает, используя 30 в качестве предела (что, по-видимому, является вашим намерением).

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