2013-12-14 2 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

Попробуйте это в вашем подзапрос вы пытаетесь получить MAX из (CAST(CAST(CONCAT(contract_balance.yy,'-',contract_balance.mm,'-01')AS CHAR) AS DATE)) AS dt но в подзапроса вашего совмещенного таблицы tmp не существует, поэтому самый простой способ сделать это, чтобы вычислить MAX из dt и использовать GROUP BY contract_balance.cid подрядчика идентификатор, я предполагаю, что это будет 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 

 Смежные вопросы

  • Нет связанных вопросов^_^