Получить объект класса с последней датой
Есть класс который хранит статусы заявок
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 шт):
В данном случае можно использовать 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
должен указываться однозначно определяемый порядок. Для этого вторым параметром там добавлена сама книга (точнее ее внутренний идентификатор), так как у нескольких книг может совпадать дата прихода.