Как получить последнюю транзакцию каждой учетной записи, используя агрегаты или запросы во внешних системах?

#sql #outsystems #aggregates

#sql #внешние системы #агрегаты

Вопрос:

У меня есть объект Accounts и объект Transactions.

Здесь у одной учетной записи может быть несколько транзакций.

Мой вопрос,

Как я могу получить последнюю транзакцию каждой учетной записи, используя агрегаты или запрос во внешних системах.?

Комментарии:

1. имя СУБД пример данных и ожидаемый результат полезны

2. СУБД SQL, вы можете поместить образцы данных, создав таблицу учетных записей и транзакций, ожидаемый результат: когда я покинул объединение этих таблиц, мне нужны все данные учетных записей, и данные каждой учетной записи должны содержать только данные одной транзакции, которая является последней транзакцией

Ответ №1:

Как я уже говорил на ваш предыдущий вопрос, лучше использовать форум OutSystems вместо stackoverflow для вопросов, связанных с OutSytems!

Что касается вашего вопроса, вы не можете легко сделать это с помощью агрегатов; если вам нужно, вы бы добавили объект Accounts и присоединились к объекту Transaction, используя Max() в дату транзакции. Однако вы не можете получить идентификатор таким образом. Вы также можете использовать Max() для идентификатора, который должен быть последовательным, но бывают ситуации, когда этого не должно быть (в зависимости от того, как создаются транзакции).

Используя SQL, вы используете подзапрос с идентификатором соединения, подзапрос с номером top 1 и отсортирован по дате. Но это просто стандартный SQL, не имеющий большого отношения к внешним системам.

Комментарии:

1. Привет @jalnl, это не «легко» сделать с помощью агрегатов внешних систем. Для этого лучше придерживаться SQL.

2. Ну, кажется, я НЕПРАВИЛЬНО ИСТОЛКОВАЛ ваш комментарий, как вы заявили, НЕ МОГУ легко, извините 🙂

Ответ №2:

Единственный известный мне способ сделать это с помощью агрегата — это снова объединить учетную запись с транзакциями и транзакциями с ней (как на изображении), используя фильтр для возврата только записей, в которых Transaction_2 .Идентификатор равен NullIdentifier()

Но я НАСТОЯТЕЛЬНО рекомендую вам использовать SQL в этом случае, так как агрегат будет выполнять перекрестное соединение, и это приведет к снижению производительности, в то время как с SQL вы можете делать то, что хотите, не прибегая к перекрестным соединениям.

введите описание изображения здесь

Итак, это просто интеллектуальное упражнение, а не то, что вы должны делать.

Возобновление, не используйте агрегат для этого типа выборки данных. Предпочитаю использовать инструмент SQL.

(из того же ответа, приведенного здесь: https://www.outsystems.com/forums/discussion/47012/how-to-get-last-transaction-of-every-account-using-aggregates/)

Приветствия.