У меня нет Oracle для тестирования его, но наиболее эффективное решение должно использовать аналитические запросы. Это должно выглядеть примерно так:
SELECT DISTINCT
UserId
, MaxValue
FROM (
SELECT UserId
, FIRST (Value) Over (
PARTITION BY UserId
ORDER BY Date DESC
) MaxValue
FROM SomeTable
)
я подозреваю, что можно избавиться от внешнего запроса и поместить отличный на внутреннее, но я не уверен. Тем временем я знаю эти работы.
, Если бы Вы хотите узнать об аналитических запросах, я предложил бы читать http://www.orafaq.com/node/55 и http://www.akadia.com/services/ora_analytic_functions.html забастовка>. Вот краткое изложение.
Под капотом аналитические запросы сортируют целый набор данных, затем обрабатывают его последовательно. Поскольку Вы обрабатываете его, Вы делите набор данных согласно определенным критериям, и затем для каждой строки смотрит на некоторое окно (значения по умолчанию к первому значению в разделе к текущей строке - что значение по умолчанию является также самым эффективным), и может вычислить значения с помощью многих аналитических функций (список которого очень похож на агрегатные функции).
В этом случае вот то, что делает внутренний запрос. Целый набор данных отсортирован по UserId тогда Дата DESC. Тогда это обрабатывает его в одной передаче. Для каждой строки Вы возвращаете UserId и первое свидание, видевшее, что UserId (так как даты отсортированы DESC, это - макс. дата). Это дает Вам Ваш ответ с дублированными строками. Тогда внешнее ОТЛИЧНОЕ давит дубликаты.
Это не особенно захватывающий пример аналитических запросов. Поскольку намного большая победа рассматривает взятие таблицы финансовых получений и вычисления для каждого пользователя и получения, рабочего общего количества того, что они заплатили. Аналитические запросы решают это эффективно. Другие решения менее эффективны. Который является, почему они - часть стандарта SQL 2003 года. (К сожалению, Пост-ГРЭС еще не имеет их. Grrr...)
Как упоминает автор Liquibase здесь , вам нужно добавить раздел CDATA внутри
В вашем конкретном примере это будет:
<sql><![CDATA[ update table_something set table_content = " something <br/> in the next line " ]]></sql>