2 つの SQL テーブルがあります
unit_transaction unit_detail_transactions
(ここのテーブル スキーマ: http://sqlfiddle.com/#!3/e3204/2 )
必要なのは、残高のあるテーブルを生成するために SQL クエリを実行することです。現在、この SQL クエリがありますが、同じ日付の 2 つのトランザクションがあると残高が正しく計算されないため、正常に動作しません。
SELECT
ft.transactionid,
ft.date,
ft.reference,
ft.transactiontype,
CASE ftd.isdebit WHEN 1 THEN MAX(ftd.debitaccountid) ELSE MAX(ftd.creditaccountid) END as financialaccountname,
CAST(COUNT(0) as tinyint) as totaldetailrecords,
ftd.isdebit,
SUM(ftd.amount) as amount,
balance.amount as balance
FROM unit_transaction_details ftd
JOIN unit_transactions ft ON ft.transactionid = ftd.transactionid
JOIN
(
SELECT DISTINCT
a.transactionid,
SUM(CASE b.isdebit WHEN 1 THEN b.amount ELSE -ABS(b.amount) END) as amount
--SUM(b.debit-b.credit) as amount
FROM unit_transaction_details a
JOIN unit_transactions ft ON ft.transactionid = a.transactionid
CROSS JOIN unit_transaction_details b
JOIN unit_transactions ft2 ON ft2.transactionid = b.transactionid
WHERE (ft2.date <= ft.date)
AND ft.unitid = 1
AND ft2.unitid = 1
AND a.masterentity = 'CONDO-A'
GROUP BY a.transactionid,a.amount
) balance ON balance.transactionid = ft.transactionid
WHERE
ft.unitid = 1
AND ftd.isactive = 1
GROUP BY
ft.transactionid,
ft.date,
ft.reference,
ft.transactiontype,
ftd.isdebit,
balance.amount
ORDER BY ft.date DESC
クエリの結果は次のとおりです。
子孫モードでトランザクション日付順に並べ替えられた正しい残高を表示する正しい SQL を実行する方法についての手がかりはありますか?
どうもありがとう。
編集:2つの可能な解決策を考えてください
この問題は、2 つのトランザクションで同じ日付を持っている場合に発生するため、次のようにします。
- 日付と時刻を「日付」列に保存します。そうすれば、2 つの正確な日付はありません。
また
- 「優先度」列を作成し、各レコードの優先度を設定します。したがって、日付が既に存在し、優先度が 1 であることがわかった場合、現在の優先度は 2 になります。
どう思いますか?