Найти неиспользованные средства невозвратных сумм
Добрый день,
(Я думаю, что мое решение в разделе "Что я пробовал" на самом деле правильное, но если бы кто-то мог подтвердить, что это было бы потрясающе)
Я пытаюсь определить, как рассчитать, сколько неиспользованных средств остается от невозвратных депозитов, где также могут существовать возвратные депозиты. Операции должны рассматриваться как взятые из невозвращаемых сумм в первую очередь для определения того, какая часть баланса между депонированными возвратными и невозвратными суммами может быть снята.
В таблице ниже, transaction_type_id = 3 не подлежат возврату, а также transaction_type_id = 2 подлежат возврату. В этом случае общий депозит составлял $10.00 возвратных и невозвратных средств. $ 0.34 уже израсходованы, но сначала их следует вычесть из невозвратных депозитов.
Теперь я понимаю, что мы можем просто посмотреть на этот пример и увидеть, что все $5,00 могут быть возвращены, так как не все невозвратные средства были израсходованы, и ни один из возвратных средств не был возвращен. Но мне пришлось удалить много строк для краткости.
В SQL, как я могу определить, сколько невозвратных средств было использовано? то есть, если бы общая сумма расходов составляла $6,50, я должен быть в состоянии показать, что только $3,50 могут быть возвращены.
Просто сделать это математически не получится, потому что может быть гораздо больше израсходовано, чем общая сумма невозвратных депозитов; поэтому я не могу просто сказать, что невозвратные депозиты- это общие расходы. Даты будут играть определенную роль в этом, так как при внесении невозвращаемой суммы расходы исходят из нее в первую очередь, даже если на балансе есть возвратные средства.
Заранее спасибо за любую помощь
сумма transaction_type_id create_date
2.5 3 7/20/18
-0.01 5 7/20/18
-0.01 5 7/22/18
-0.01 5 7/22/18
-0.02 4 7/22/18
-0.02 4 7/22/18
-0.02 4 7/22/18
-0.02 4 7/22/18
-0.01 5 7/22/18
-0.01 5 7/22/18
-0.01 5 7/24/18
-0.01 5 7/24/18
2.5 2 8/2/18
2.5 2 8/2/18
-0.01 5 8/2/18
-0.01 5 8/2/18
-0.01 5 8/2/18
-0.01 5 8/2/18
-0.02 4 8/2/18
-0.01 5 8/2/18
-0.02 4 8/2/18
-0.02 4 8/2/18
-0.02 4 8/2/18
-0.02 4 8/2/18
-0.01 5 8/2/18
-0.01 5 8/2/18
-0.01 5 8/2/18
-0.01 5 8/2/18
2.5 3 8/2/18
Что я уже пробовал:
Я дошел до того, что составил временную таблицу невозвратных депозитов transaction_type_id 3 и затем попытались увидеть, какие операции были бы сделаны из этих средств. но, честно говоря, я совсем заблудился.
Я не ищу кого-то, кто писал бы мои сценарии для меня. Простое языковое объяснение того, как я должен подойти к этому, привело бы меня так же далеко.
Вот попытка, которую я предпринял, но я не совсем уверен, что она отражает то, что я пытаюсь сделать.
DECLARE @user_id as INT SET @user_id = 8004 SELECT SUM(DZCash) as DZCashClaimed, CASE WHEN SUM(DZCash) + SUM(CashExpended) > 0 THEN SUM(DZCash) + SUM(CashExpended) ELSE 0 END as UnusedDZCash, SUM(CashDeposited) as CashDeposited, SUM(CashExpended) as CashExpended, SUM(CashBalance) as CashBalance, SUM(CashBalance) - CASE WHEN SUM(DZCash) + SUM(CashExpended) > 0 THEN SUM(DZCash) + SUM(CashExpended) ELSE 0 END as ElligibleAMountForWithdraw FROM ( SELECT SUM(amount) as DZCash, 0 as CashDeposited, 0 as CashExpended, 0 CashBalance FROM user_wallet_cash WHERE user_id = @user_id AND amount > 0 AND transaction_type_id = 3 UNION SELECT 0 as DZCash, SUM(amount) as CashDeposited, 0 as CashExpended, 0 CashBalance FROM user_wallet_cash WHERE user_id = @user_id AND amount > 0 AND transaction_type_id = 2 UNION SELECT 0 as DZCash, 0 as CashDeposited, SUM(amount) as CashExpended, 0 CashBalance FROM user_wallet_cash WHERE user_id = @user_id AND amount < 0 AND transaction_type_id IN (4,5) UNION SELECT 0 as DZCash, 0 as CashDeposited, 0 as CashExpended, SUM(amount) as CashBalance FROM user_wallet_cash WHERE user_id = @user_id )t
Mehdi Gholam
Начните с четкого определения вашей проблемы (ваш пост трудно понять никому, кроме вас, и вы, похоже, сами заблудились).
Member 13250972
Спасибо, но я чувствую, что достаточно ясно описал проблему; и если бы я не был потерян в том аспекте, который я пытаюсь решить, я бы не размещал вопрос на этом форуме. Тем не менее, я попытаюсь сломать его.
Пользователи могут вносить возвращаемые депозиты в свой user_cash_wallet (user_cash).
Мой сайт может вносить невозвратные депозиты в свой user_cash_wallet (site_cash).
Пользователи могут тратить наличные деньги из своего user_cash_wallet (expended_cash).
Денежные средства, израсходованные из user_cash_wallet, должны быть вычтены из средств site_cash до того, как будут использованы средства user_cash.
Отраженный баланс всегда является user_cash_deposited + site_cash_deposited - expended_cash.
Если пользователь решает, что он хочет снять наличные деньги, которые он внес, мне нужно иметь возможность рассчитать, сколько user_cash остается, определив, сколько site_cash было израсходовано. Если какая-либо сумма site_cash остается неиспользованной, то они должны иметь возможность снять всю сумму депонированного user_cash; в противном случае они должны иметь возможность снять остаток денежных средств, так как все site_cash были использованы.
Пожалуйста, дайте мне знать, если проблема станет более ясной. Я подумал, что мне, возможно, придется подумать о том, когда был депонирован site_cash, но я чувствую, что мое решение правильно - я просто хотел бы получить проверку здравомыслия, чтобы убедиться, что я ничего не пропустил.
Member 13250972
И кстати, мое решение не работает. Как я и подозревал, мне нужно уметь вычислять, основываясь на датах, когда site_cash был депонирован, а expended_cash произошел впоследствии.
Пример:
$2.50 site_cash вносится сайтом на депозит.
Пользователь тратит $0.50, оставляя баланс в размере $2.00 (неиспользуемый site_cash). Из которых $0.00 возвращается.
Пользователь вносит $2.50, оставляя баланс $4.50. Из которых $2.50 возвращается; оставляя $2.00 неиспользованным site_cash.
Пользователь тратит еще $3.00, оставляя баланс в размере $1.50. Из которых $1.50 возвращается, так как сначала используется неиспользованный site_cash в размере $2.00. До этого момента все было правильно.
Вот тут-то все и пошло наперекосяк. Если сайт вносит еще $2.50 site_cash, оставляя баланс $4.00, мой скрипт указывает, что пользователь теперь может снять $2.50, потому что математика рисует $1.00, которые ранее вышли из депозита user_cash из вновь внесенного site_cash, когда только будущие расходы должны выйти из средств site_cash.
Если я только сделал вещи более неясными с этим примером, то я думаю, что я сам по себе.