SQLite: Как я могу обновить столбец со значением, которое является разницей между двумя строками другого столбца? - PullRequest
0 голосов
/ 07 февраля 2019

Как я могу обновить столбец со значением, которое представляет собой разницу (в процентах) между двумя строками другого столбца?

от:

 y | coeff | decreased %
---|-------|------------
15 | 1.35  |
16 | 1.22  |
17 | 1.14  |
18 | 1     |

до:

 y | coeff | decreased %
---|-------|------------
15 | 1.35  |
16 | 1.22  |  9.629
17 | 1.14  |  6.557
18 | 1     | 12.280

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Я сделаю так:

update tbl a
set dec_p  = select (a.coeff-b.coeff)/a.coeff as dec
             from a left join tbl b on (a.y=b.y+1)
0 голосов
/ 07 февраля 2019

С этим UPDATE, который получает предыдущее значение coeff, даже если идентификаторы не являются непрерывными:

update tablename
set decreased = 100.0 * (1.0 - coeff / (
    select t.coeff from tablename t
    where t.y = (select max(p.y) from tablename p where p.y < tablename.y)
  )
)

См. Демоверсию

0 голосов
/ 07 февраля 2019

Если ваш y действительно последовательный без пробелов, используйте left join:

select t.*, 100 - (t.coeff * 100.0 / tprev.coeff) as decreased
from t left join
     t tprev
     on tprev.y = t.y - 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...