0

我在这里得到了这些查询字符串...

SELECT 
    c.clientid, c.clientname, c.billingdate, 
    i.total - (select ifnull(sum(p.amount), 0) from payment p 
               where p.invoice = i.invoiceid Order by i.invoiceid) AS remaining 
FROM 
    client c 
INNER JOIN 
    invoice i 
WHERE 
    c.clientid = i.client 
ORDER BY 
    clientname

它的作用是获取所有客户的列表、他们的账单日期和余额。我也有客户的发票,每张发票都有余额。我要做的是为每个客户获取客户最新的余额(具有最高 id 值的发票)。

我有什么查询它多次列出每个客户,每张发票的每个剩余余额......就像这样

client 1 0.00
client 1 1.00
client 1 3.00

我正在寻找的是

client 1 0.00
client 2 3.00
client 3 5.00

我希望我想做的事情是有意义的。我也试过Order by MAX(i.invoiceid),但只返回一个客户。

4

2 回答 2

1

我不确定为什么 max invoiceid 对您不起作用

SELECT 
    c.clientid, c.clientname, c.billingdate, 
    i.total - (select ifnull(sum(p.amount), 0) from payment p 
               where p.invoice = i.invoiceid Order by i.invoiceid) AS remaining 
FROM 
    client c 
INNER JOIN 
    invoice i 
WHERE 
    c.clientid = i.client 
AND i.invoiceid = (SELECT MAX(i2.invoiceid) FROM invoice i2 WHERE i2.client = i.client) 
ORDER BY 
    clientname

现在您应该只获得客户最新的发票

于 2012-08-29T18:48:33.430 回答
0

试试这个 :

SELECT c.clientid, c.clientname, c.billingdate, i.total - 
(select ifnull(sum(p.amount), 0) from payment p where p.invoice = i.invoiceid Order by i.invoiceid DESC LIMIT 1) AS remaining 
FROM client c inner join invoice i where c.clientid = i.client ORDER BY clientname

使用 DESCending 订单和 LIMIT 1,您只能为每个客户选择一个金额,即具有最高 id 的金额(因此是最新的)

于 2012-08-29T18:41:21.513 回答