Получить последние детали транзакции от кредитора

У меня есть таблица кредитной истории, которая содержит все кредиты, которые клиент заимствовал и погасил. Есть два статуса (в одной строке), которые указывают на получение кредита и погашение кредита: LD = кредит выплачен, а LP = кредит выплачен.

Моя проблема в том, что я пытаюсь найти:

  1. непогашенный остаток (сумма (основная сумма + проценты) в LD - сумма (основная сумма + проценты) в LP)
  2. Сумма платежа(сумма(основная сумма+проценты)) в LD
  3. СУММА всех LD, т.е. основная сумма + проценты как сумма кредита
  4. Дата последнего погашения, т.е. в LP
  5. Выплаченная сумма (основная сумма + проценты) в LP

Структура таблицы

введите здесь описание изображения

Это мое решение до сих пор:

для LP

$amtdues = "select h.ac_no, loan_amt, MAX(trx_date) AS Last_Pay, MAX(principal+interest) as Last_Paid,  disb_date, exp_date,  principal+interest as loan_interest, MAX(principal-interest) as outstanding_balance, trx_date as payment_date from loanhist h, loans l where h.ac_no = '$id' and l.ac_no = '$id' and trx_type = 'LP' group by trx_date, loan_amt, disb_date, exp_date, h.ac_no, interest, principal, trx_date ";

$amts = sqlsrv_query($conn, $amtdues);

$lp = sqlsrv_fetch_array($amts, SQLSRV_FETCH_ASSOC);

Для дальнего зарубежья

$amtdues2 = "select h.ac_no, loan_amt, MAX(trx_date) AS Last_Pay, disb_date, exp_date,  principal+interest as loan_interest, MAX(interest+principal) as outstanding_balance, MAX(interest+principal) as installment, trx_date as payment_date from loanhist h, loans l where h.ac_no = '$id' and l.ac_no = '$id' and trx_type = 'LD' group by trx_date, loan_amt, disb_date, exp_date, h.ac_no, interest, principal, trx_date ";

$amts2 = sqlsrv_query($conn, $amtdues2);
$ld = sqlsrv_fetch_array($amts2, SQLSRV_FETCH_ASSOC);

Мой вывод в html

<td><?php echo parseCurrency(abs($lmts['loan_limit']));?></td>
 <td><?php echo parseCurrency(abs($ld['loan_interest']));?></td>
 <td><?php echo parseCurrency(abs($ld['outstanding_balance'] - $lp['outstanding_balance']));?> </td>
 <td><?php echo parseCurrency(abs($ld['installment']));?></td>

После того, как я попробовал эти запросы, я получил неверные значения. Может ли кто-нибудь помочь сестре?


person Tonye Boro    schedule 14.05.2018    source источник
comment
Вы запросили 5 запросов, что слишком широко, IMO. Можете ли вы сузить его до запроса только 2, а еще лучше, 1 запроса?   -  person Tim Biegeleisen    schedule 14.05.2018
comment
@TimBiegeleisen, просто нужен кто-то, кто укажет мне правильное направление. Спасибо.   -  person Tonye Boro    schedule 14.05.2018
comment
Если бы вы могли поделиться своей структурой таблицы и некоторыми примерами данных, было бы намного проще ответить на ваш вопрос.   -  person Nick    schedule 14.05.2018
comment
@Ник, таблица добавлена.   -  person Tonye Boro    schedule 14.05.2018


Ответы (1)


Основываясь на табличной информации для loanhist и делая некоторые предположения о том, что находится в loans (и что существует отношение 1:many от loans до loanhist), я думаю, что этот запрос направит вас в правильном направлении.

SELECT l.ac_no, 
       l.loan_amt,
       l.disb_date, 
       l.exp_date,  
       SUM(CASE WHEN trx_type='LD' THEN h.principal+h.interest ELSE 0 END) -
         SUM(CASE WHEN trx_type='LP' THEN h.principal+h.interest ELSE 0 END) AS outstanding_balance,
       MAX(CASE WHEN trx_type='LD' THEN h.principal+h.interest ELSE 0 END) AS instalment_amount,  
       SUM(CASE WHEN trx_type='LD' THEN h.principal+h.interest ELSE 0 END) AS loan_amount,
       MAX(CASE WHEN trx_type='LP' THEN trx_date ELSE NULL END) AS last_payment_date,
       SUM(CASE WHEN trx_type='LP' THEN h.principal+h.interest ELSE 0 END) AS amount_paid
FROM loans l
JOIN loanhist h
ON h.ac_no = l.ac_no
WHERE l.ac_no = '$id'
GROUP BY l.ac_no, l.loan_amt, l.disb_date, l.exp_date
person Nick    schedule 14.05.2018
comment
Спасибо за вашу помощь. Код не запустился - он не возвращает значений, и при тестировании на сервере sql он говорит, что неправильный синтаксис рядом с CASE, ожидая выбора или ;(' - person Tonye Boro; 14.05.2018
comment
Извините, похоже, я пропустил запятую после outstanding_balance - person Nick; 14.05.2018
comment
Привет, @Nick, я очень ценю твою помощь. Я дам вам знать, как все пройдет после тестового запуска на главном сервере. Мне пришлось сгруппировать l.ac_no, l.loan_amt, l.disb_date, l.exp_date, надеюсь, таким образом он все еще дает правильные цифры? Потому что выдавало ошибку, когда я группировал только по l.ac_no. - person Tonye Boro; 14.05.2018
comment
Также должно быть хорошо группировать по этим переменным. Я должен был включить это в исходный запрос, я отредактировал свой ответ. - person Nick; 14.05.2018