2014-03-29 43 views
0
Transaction Code Credit Debit Date   Year Month Transaction Type Paid By Customer ID Reference 
1110101   100 0  2013-06-26 2013 7   RVC    Cash  10547   4010101 
4010101   0  100 2013-07-01 2013 7   INV           10547   0 

以上是交易表。任何交易都發生在這裏。mysql找到優秀條目

現在,我需要在2013年爲所有客戶獲得本年度到期的所有未付款項.RVC(交易類型下)是指支付的金額,其中INV(根據交易類型)指尚未支付的金額。你看到的兩行是INV,它是在RVC中顯示並隨後付費的。現在每個月自動創建INV,並且每當有RVC付款時就創建RVC。

現在我怎麼知道哪個INV是付款的。因爲參考加上年份加上月份需要與RVC進行比較,因爲它比較混亂。

我們如何通過MySQL查詢來實現它?

對此有何幫助?

+0

請顯示一些示例數據和所需結果。理解您嘗試應用的業務規則有點困難。 –

回答

0

如果你想檢查打開的付款,您可以使用類似以下內容:

SELECT * FROM transactions 
    WHERE transaction_type='INV' 
    AND transaction_code 
     NOT IN (SELECT reference FROM transactions where transaction_type='RVC'); 

編輯:

由於這是上一大桌一個相當昂貴的查詢,我會可能會將客戶ID存儲在INV行中的客戶ID字段中,並將參考字段保留爲空。
處理付款時,將相應INV行中的參考字段更新爲付款參考「RVC」行的ID。這應該很容易,因爲您正在找到正確的事務代碼來插入「RVC」行。然後,您可以更新您創建

UPDATE transactions SET reference=$rvc_id WHERE transaction_code=$inv_id; 

所以付款已被處理之後,參考域將在充滿基準(目前RVC線)「INV」的紀錄。
未付INV行會有一個空白的參考,這將意味着檢查未付的'INV',你將只需運行以下內容:

SELECT * FROM transactions WHERE transaction_type='INV' AND reference IS NULL; 
+0

嗨,謝謝你的回答,但如果我這樣做的引用是NULL,它也會顯示支付的記錄,因爲INV記錄只通過比較事務代碼和參考以及年和月與RVC記錄相關聯。那麼我該如何解決這個問題呢?如果付款已完成,您將看到INV記錄永遠不會更新。如果付款已經完成,則創建RVC記錄。 – Yusuf

+0

對不起,我讀錯了。我認爲第一個記錄是INV和第二個RVC。我會更新我的答案。 – Loopo

+0

是的,謝謝,查詢確實非常昂貴,並且需要花費數年來處理它。不是基於網絡或其他任何網站的理想解決方案。可以有任何其他優化的查詢,因爲這個問題是我正在更新的表正被後臺使用,所以不能改變它。 – Yusuf