1

私の質問の見出しがひどいことは確かですが、とにかく私は請求書と呼ばれるテーブルを持っており、そのテーブル内に各請求書にはIDがあり、各IDにはクライアントIDがあるため、クライアントには複数の請求書があります. 最新の請求書の残高を取得しようとしています。私が書いたコードが機能しません。どこが間違っているのか教えてもらえますか?

SELECT c.clientid,
    c.clientname,
    c.billingdate,
    (SELECT remainingbalance 
     FROM invoice i 
     WHERE i.client = c.clientid) AS remaining
FROM client c
ORDER BY clientname
4

3 に答える 3

5

使用するINNER JOIN

これを試して

更新:回答を修正しました。それが機能するかどうかを確認してください

 SELECT c.clientid,
 c.clientname,
 c.billingdate,
 d.remainingbalance
 FROM client c 
 INNER JOIN (
             SELECT  clientid,
             MAX(invoiceid) invoiceid
             FROM    invoice
             GROUP BY  clientid
             ) d
 ON c.clientid = d.clientid
 ORDER BY c.clientname
于 2012-08-29T04:16:41.447 に答える
3

すぐに、次のようなものを試してください

SELECT  c.clientid, 
        c.clientname, 
        c.billingdate, 
        (
            SELECT  TOP 1 
                    remainingbalance  
            FROM    invoice i  
            WHERE   i.client = c.clientid
            ORDER BY i.invoiceid DESC
        ) AS remaining 
FROM    client c 
ORDER BY    clientname

どのRDMSを使用していますか?

別のアプローチは次のようになります

SELECT  c.clientid,  
        c.clientname,  
        c.billingdate,
        rb.remainingbalance
FROM    client c  INNER JOIN
        (
            SELECT  i.clientid,
                    i.remainingbalance 
            FROM    invoice i INNER JOIN
                    (
                        SELECT  clientid,
                                MAX(invoiceid) invoiceid
                        FROM    invoice
                        GROUP BY    clientid
                    ) m ON  i.invoiceid = m.invoiceid
                        AND i.clientid = m.clientid
        ) rb    ON  c.clientid = rb.clientid
ORDER BY clientname 

最初にクライアントごとに「最新の」請求書を取得し、次にその請求書から必要な詳細を取得して、クライアント情報とともに表示します。

于 2012-08-29T04:23:58.740 に答える
0

サブセレクトでi.id DESCで注文

于 2012-08-29T04:17:57.750 に答える