2017-06-19 133 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