Получить объект класса с последней датой

Есть класс который хранит статусы заявок

CLASS TicketStatus 'Статус заявки';
date 'Дата' = DATA DATETIME(TicketStatus) NONULL;
ticket 'Заявка' = DATA Ticket(TicketStatus) NONULL;
status 'Статус' = DATA Status(TicketStatus) NONULL;

Как получить последний статус по свойству date?

Вот так возвращает тип DATETIME, а нужно вернуть тип TicketStatus

lastStatus 'Статус' (Ticket t) = GROUP MAX date(TicketStatus ts) BY ticket(ts);

Ответы (1 шт):

Автор решения: DAle

В данном случае можно использовать GROUP LAST с блоком ORDER, который позволит упорядочить по дате:

lastStatus 'Статус' (Ticket t) = 
    GROUP LAST status(TicketStatus ts) ORDER date(ts), ts BY ticket(ts);

Значение объекта ts добавляется в блок ORDER для обеспечения однозначно определяемого порядка.

Похожий пример есть в документации.

Есть набор книг, привязанных к определенной категории, и даты их прихода.

CLASS Book 'Книга'; CLASS Category 'Категория';

category 'Категория' = DATA Category (Book); 
date 'Дата прихода' = DATA DATE (Book);

Необходимо найти последнюю приходившую книгу по выбранной категории.

Решение:

book 'Последняя книга' (Category c) = GROUP LAST Book b ORDER date(b), b BY category(b);

Важно помнить, что в ORDER должен указываться однозначно определяемый порядок. Для этого вторым параметром там добавлена сама книга (точнее ее внутренний идентификатор), так как у нескольких книг может совпадать дата прихода.

→ Ссылка