Как создать набор исторических данных для текущих и предыдущих записей

#sql #sql-server #tsql

Вопрос:

У меня есть обычная таблица в базе данных SQL Server, как показано ниже

Имя Статус Дата Изменения
X Провал 16/09/2021
X Провал 28/09/2021
X Выполнено 02/10/2021
Y Провал 30/09/2021
Y Выполнено 02/10/2021

И я хочу сделать отчет в виде исторического отчета на основе группы данных, как показано ниже

Имя Текущее Состояние Предыдущий статус Дата Изменения
X Выполнено Провал 02/10/2021
X Провал Провал 28/09/2021
Y Выполнено Провал 02/10/2021

любая помощь будет высоко оценена

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

1. Вы можете использовать функцию окна ЗАДЕРЖКИ.

Ответ №1:

 select * from (
   select * , LAG(Status) over (partition by Name order by ModifiedDate) prvstatus
   from table
) t where t.prvstatus is not null;
 

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

1. Я уже пробовал тот же запрос, но он вызывает дублирование данных, когда вам нужно прочитать данные из нескольких таблиц

2. @Марк, я ожидаю, что он выдаст именно тот результат, который указан в вопросе. Если это не поможет, задайте другой вопрос с реальной проблемой.

3. @Serg для того, чтобы прояснить точный вопрос, который у меня есть, я уже добавил приведенные выше таблицы, и ответ никогда не совпадает

4. @Marc — учитывая ваши примерные данные, этот запрос выдает именно то, что вы сказали, что хотите для вывода. Похоже, у вас должна быть более сложная проблема, чем то, что вы опубликовали, поэтому это не работает с вашими реальными данными.