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)ましたが、クライアントは 1 つしか返されません。

4

2 に答える 2

1

請求書 ID の最大値がうまくいかなかった理由がわかりません

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 を使用すると、クライアントごとに 1 つの金額のみを選択します。ID が最も高い (つまり最新の) 金額です。

于 2012-08-29T18:41:21.513 に答える