2

私はSQLとstackoverflowが初めてなので、申し訳ありません。また、データベースは私が設計したものではなく、現在変更できません。次のテーブルがあります。

Clients (ClientId , Client_Name)
Client_Purchases ( Purchase_id, ClientID, Credits, Credits_logged)
Service_Log (LogId, Purchase_id, log_date)

クレジットが 0 のすべてのクライアントを最新の log_date 順に表示したいと考えています。これを行うには、最初に sum(Credits - Credits_logged) を取得し、それらが 0 の場合、クライアントにクレジットが残っていないことがわかります (クライアントは複数の Client_Purchases を持つことができることに注意してください)。次に、問題が発生しているように見える最新の log_date で整理します。

私が次のことをした場合:

SELECT  a.ClientId, a.Client_Name, (max(c.log_date))
FROM `Client_Purchases` AS a, Clients AS b, Service_Log AS c
WHERE b.ClientId=a.ClientId AND a.Purchase_id = c.Purchase_id
GROUP BY a.ClientId
HAVING sum(a.Credits-a.Credits_logged) = 0
ORDER BY (max(c.log_date)) DESC

購入した可能性のあるクライアントがまだ表示されていることを除けば、ほぼ正しいです。問題は、Purchase_id を介してテーブルを接続するところにあると思います。どんな助けでも大歓迎です!

4

1 に答える 1

1

これを試しましたか:-

 SELECT a.ClientId, a.Client_Name, (max(c.log_date)) 
 FROM Client_Purchases AS a, Clients AS b, Service_Log AS c
 WHERE b.clientid=a.clientid       //stuid is not a column in your table as mentioned
 AND a.Purchase_id = c.Purchase_id 
 GROUP BY a.ClientId 
 HAVING sum(a.Credits-a.Credits_logged) = 0 
 ORDER BY (max(c.log_date)) 
 DESC
于 2012-11-25T17:52:50.183 に答える