Показать сообщение отдельно
Старый 15.07.2004, 13:29   #1  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Query и exists join с group by
Добрый день!

Возникла такая задача: есть некий журнал изменения состояний объектов StatesLog. В нем несколько полей, в том числе: поле-идентификатор объекта (ObjectId), поле с кодом состояния (StateId), поле даты изменения состояния (ChgDate). Состояния каждого объекта меняются не чаще 1 раза в сутки. Необходимо сделать режим отображения только текущих состояний объектов, но отображать при этом все поля журнала.
Что сделал я: попытался присоединить StatesLog к самой себе по exists join, линк по полям ObjectId и ChgDate, с установленной группировкой по ObjectId и выбором максимума по ChgDate. Вот код метода init():
PHP код:
    QueryBuildDatasource qbds;

    
super();
    
qbds StatesLog_Q.dataSourceTable(tableNum(StatesLog)).addDataSource(tableNum(StatesLog));
    
qbds.joinMode(JoinMode::ExistsJoin);
    
qbds.fetchMode(0);
    
qbds.addLink(fieldNum(StatesLogChgDate),     fieldNum(StatesLogChgDate));
    
qbds.addLink(fieldNum(StatesLogObjectId), fieldNum(StatesLogObjectId));
    
qbds.addSelectionField(fieldNum(StatesLogChgDate), SelectionField::Max);
    
qbds.addSelectionField(fieldNum(StatesLogObjectId));
    
qbds.orderMode(OrderMode::GroupBy);
    
qbds.addSortField(fieldNum(StatesLogObjectId)); 
АХАРТА генерит правильный запрос на Х++, но при переводе его в SQL зачем-то добавляет лишнюю внешнюю группировку по ObjectId, используя при этом алиас из внутреннего запроса, на что SQL ругается со словами "Не знаю такого алиаса или таблицы". Т.е. видно, что в запросе присутствуют две абсолютно одинаковые фразы group by, во внутреннем и внешнем запросе.

1. Как вы думаете, почему так происходит и как это побороть?
2. Может быть, есть другой способ решить задачу? Не забываем, что нужно отображать все поля журнала. Группировку по всем полям не предлагать, с этим есть проблемы, т.к. я привел упрощенный вариант задачи.

АХАРТА 3.0СП2

Спасибо
__________________
Андрей.