2013-12-14 21 views
0

我想從MySQL數據庫中選擇有關客戶餘額的最新信息。我寫了下一個腳本:獲取合同的最後數據

SELECT * 
FROM 
    (SELECT   
        contract_balance.cid, 
        /*contract_balance.yy, 
        contract_balance.mm,*/ 
        contract_balance.expenses, 
        contract_balance.revenues, 
        contract_balance.expenses + contract_balance.revenues AS total, 
        (CAST(CAST(CONCAT(contract_balance.yy,'-',contract_balance.mm,'-01')AS CHAR) AS DATE)) AS dt 
      FROM contract_balance 

      /*WHERE     
       CAST(CAST(CONCAT(contract_balance.yy,'-',contract_balance.mm,'-01')AS CHAR) AS DATE) < '2013-11-01' 
      LIMIT 100*/ 

    ) AS tmp 
    WHERE tmp.dt = (
         SELECT MAX(b.dt) 
         FROM tmp AS b 
         WHERE tmp.cid = b.cid  
        ) 

但服務器返回:

表 'clientsdatabase.tmp' 不存在

如何改變獲得所需的數據驗證碼?

回答

0

試試這個在您的子查詢你想獲得的(CAST(CAST(CONCAT(contract_balance.yy,'-',contract_balance.mm,'-01')AS CHAR) AS DATE)) AS dtMAX但在子查詢的別名表tmp不存在,所以你可以做最簡單的方法是計算dtMAX和使用GROUP BY contract_balance.cid承包商ID,我想它會fullfill您的需求

SELECT   
contract_balance.cid, 
contract_balance.expenses, 
contract_balance.revenues, 
contract_balance.expenses + contract_balance.revenues AS total, 
MAX((CAST(CAST(CONCAT(contract_balance.yy,'-',contract_balance.mm,'-01')AS CHAR) AS DATE))) AS dt 
FROM contract_balance 
GROUP BY contract_balance.cid 
0

試試這個:

SELECT * 
FROM (SELECT cb.cid, cb.expenses, cb.revenues, cb.expenses + cb.revenues AS total, 
      (CAST(CAST(CONCAT(cb.yy,'-',cb.mm,'-01')AS CHAR) AS DATE)) AS dt 
     FROM contract_balance cb ORDER BY dt DESC 
    ) AS A 
GROUP BY A.cid