#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 — учитывая ваши примерные данные, этот запрос выдает именно то, что вы сказали, что хотите для вывода. Похоже, у вас должна быть более сложная проблема, чем то, что вы опубликовали, поэтому это не работает с вашими реальными данными.