2017-06-19 114 views
0

我有上表。如果我總結餘額值,我會有23.47。用不同的總和值返回行

Date  num (pk) document supplier debit  credit  balance  
2016-12-06 4302458  26933  SUPPLIER_1 4,35     4,35  
2016-12-06 4302456  26933  SUPPLIER_1 19,12     19,12  
2016-12-13 4330098  27023  SUPPLIER_1 5,79     5,79  
2016-12-13 4330096  27023  SUPPLIER_1 25,45     25,45  
2016-12-13 4330095  27023  SUPPLIER_1    1.157,00 -1.157,00 
2016-12-13 4330591  223130  SUPPLIER_1 1.115,76    1.115,76 
2016-12-13 4330588     SUPPLIER_1 10,00     10,00  
2016-12-19 4342835  27108  SUPPLIER_1    1.294,00 -1.294,00 
2016-12-19 4342838  27108  SUPPLIER_1 6,47     6,47  
2016-12-19 4342836  27108  SUPPLIER_1 28,47     28,47  
2016-12-22 4366603  223841  SUPPLIER_1 1.259,06    1.259,06 
2016-12-26 4371509  27200  SUPPLIER_1 14,61     14,61  
2016-12-26 4371511  27200  SUPPLIER_1 3,32     3,32  
2016-12-26 4371508  27200  SUPPLIER_1    664,00  -664,00  
2016-12-29 4376366  224598  SUPPLIER_1 646,07     646,07  

我想選擇餘額總和爲23.47的行。在這個例子中,將是這些線?

Date  num (pk) document supplier debit  credit  balance  
2016-12-06 4302458  26933  SUPPLIER_1 4,35     4,35  
2016-12-06 4302456  26933  SUPPLIER_1 19,12     19,12 

我試圖使用HAVING CLAUSE但返回是不正確的。 我也試過PGSQL function,但沒有奏效。 有什麼方法可以正確選擇?

+0

這相當於「找到總和爲零的數字的最大子集」。我很確定那是NP,如果不是NP-complete。它不適合SQL。 –

+0

Linoff,NP是什麼意思? – thiagofred

+1

。 。 https://en.wikipedia.org/wiki/NP_(complexity)。 –

回答

1

即時通訊不知道如果這是最簡潔的方式沒有寫程序,但它會工作。這會使用創建的列作爲連接將該表連接到自身。

SELECT 'join' as link, a.Date, a.num, a.document, a.debit, a.credit 
FROM test a 

INNER JOIN (
    SELECT 'join' as link, a.Date, a.num, a.document, a.debit, a.credit FROM test a 
)b 

ON 'join' = b.link 
WHERE a.debit + b.debit = 23.47 
+0

所以,我認爲最好的辦法是編寫一個程序,因爲我有其他供應商的其他價值,無論是借記還是信用,但我只關注一個片段。我嘗試過這個例子,但是我不知道我是否錯了,但是結果給我帶來了一連串的預期:[link](http://i.imgur.com/3R7Bm5L.png)我想我們以正確的方式,但尚未。 – thiagofred