#sql #presto
#sql #presto
Вопрос:
У меня есть таблица, содержащая историю аудита элементов, каждое изменение, внесенное пользователем, создаст событие/строку данных в базе данных, и в таблице будут храниться все изменения с момента первого редактирования элемента до последнего времени. Если элемент был изменен 5, в нем будет 5 строк данных, которые будут показывать, например, дату-время, имя элемента, идентификатор элемента, кто редактировал,…
Теперь мне нужно извлечь только одну и только последнюю модификацию этого элемента. Я попытался использовать подтаблицу, которая будет упорядочивать время обновления по убыванию, но когда я объединю их вместе, они покажут все изменения этого элемента с первого раза до последнего.
Пожалуйста, не мог бы кто-нибудь помочь мне извлечь только точное последнее действие/модификацию? Очень признателен.
Комментарии:
1. Что вы пробовали? В SQL Server мы обычно используем функцию ROW_NUMBER (). Псевдокод был бы чем-то вроде
ROWNUMBER() OVER (PARTITION BY ItemID, ORDER BY EditDate DESC) AS rn
. Это может быть использовано во временной таблице или в общем табличном выражении и добавит столбец rn, упорядоченный по дате редактирования в порядке убывания (то есть последний получит rn = 1, предыдущий rn = 2 и т. Д.) На идентификатор элемента (и дополнительные столбцы могут быть добавлены в случае составных ключей). Затем вы можете выбрать эту временную таблицуWHERE rn = 1
и присоединиться к ней на основе идентификатора элемента и даты редактирования.2. Большое вам спасибо, Шмитцит, я наконец-то понял это благодаря вашему предложению. Очень признателен.
3. Я добавил это в качестве ответа. Если вы примете его, то это поможет будущим посетителям ответить на вопрос 🙂
Ответ №1:
В SQL Server мы обычно используем ROW_NUMBER()
функцию. Псевдокод был бы чем-то вроде:
ROWNUMBER() OVER (PARTITION BY ItemID, ORDER BY EditDate DESC) AS rn
Это может быть использовано во временной таблице или в общем табличном выражении и добавит столбец rn, упорядоченный по дате редактирования в порядке убывания (то есть последний получит rn = 1, предыдущий rn = 2 и т. Д.) На идентификатор элемента (и дополнительные столбцы могут быть добавлены в случае составных ключей). Затем вы можете выбрать эту временную таблицу WHERE rn = 1
и присоединиться к ней на основе идентификатора элемента и даты редактирования.