SQL-запрос для получения последнего действия/обновления для определенного объекта

#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 и присоединиться к ней на основе идентификатора элемента и даты редактирования.