SQL-запрос для расчета текущего баланса от открытия - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужно, чтобы вы помогли мне сделать SQL-запрос для расчета баланса.Пожалуйста, проверьте мою таблицу ниже.«Открытие» используется только для первого расчета.

Большое спасибо

Вот мой стол

trx_no  Opening  debit  credit
ab123   200      0      100
ab456   200      0      50
ab789   200      0      50
cd123   200      50     0
cd456   200      0      10
cd789   200      0      40

Вот ожидаемый результат

trx_no  Opening  debit  credit    balance
ab123   200      0      100       300
ab456   200      0      50        350 
ab789   200      0      50        400
cd123   200      50     0         350
cd456   200      0      10        360
cd789   200      0      40        400

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Предполагая, что ваш столбец trx_no будет всегда иметь фиксированную ширину в 5 символов, и что лексикографическая сортировка указывает возраст транзакции, тогда мы можем попытаться использовать коррелированный подзапрос, чтобы найти скользящийбаланс:

SELECT
    trx_no,
    Opening,
    debit,
    credit,
    Opening + (SELECT SUM(t2.credit - t2.debit)
               FROM yourTable t2
               WHERE t2.trx_no <= t1.trx_no) AS balance
FROM yourTable t1
ORDER BY
    trx_no;

Если вы используете MySQL 8+, то оконные функции делают это немного менее многословным:

SELECT
    trx_no,
    Opening,
    debit,
    credit,
    Opening +
        SUM(credit - debit) OVER (OVER ORDER BY trx_no) AS balance
FROM yourTable t1
ORDER BY
    trx_no;
0 голосов
/ 27 сентября 2019

Еще один вопрос, как насчет запроса, чтобы получить последний баланс за один запрос?Спасибо

trx_no  Opening  debit  credit    balance lastbalance
ab123   200      0      100       300     400
ab456   200      0      50        350     400
ab789   200      0      50        400     400
cd123   200      50     0         350     400
cd456   200      0      10        360     400
cd789   200      0      40        400     400

Редактировать: я использую этот запрос, я получил правильный результат, но я не уверен, что этот запрос правильный (хороший) или нет:

SELECT trx_no, Открытие,дебет, кредит, открытие + (ВЫБЕРИТЕ СУММУ (t2.credit - t2.debit) ОТ yourTable t2 ГДЕ t2.trx_no <= t1.trx_no) AS баланс, открытие + (ВЫБЕРИТЕ СУММУ (кредит - дебет) ОТ yourTable) КАК последний баланс ОТyourTable t1 ORDER BY trx_no; </p>

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