У меня есть следующая таблица журнала изменения имени файла.
ChangeNameLog ( Дата , OldName , NewName)
Первичный ключ: Дата , Старое имя
Данные таблицы выглядят как
Date OldName NewName
1/1 aaa bbb
1/2 bbb ccc
1/3 ccc bbb
1/4 bbb ddd
2/1 xx yy
2/2 yy zz
(Имя файла aaa было изменено на bbb , а затем на ccc , bbb , ddd позже
Имя файла xx было изменено на гг , а затем на zz )
Я хочу получить самое старое имя для всех новых имен. Результат будет выглядеть как
Date NewName OldestName
1/2 bbb aaa
1/3 ccc aaa
1/4 ddd aaa
2/1 yy xx
2/2 zz xx
В любом случае, писать Transact-SQL (версия 2008 в порядке) без использования курсора для зацикливания таблицы журнала?
Следующий SQL может использоваться для подготовки данных.
declare @log table (
Date Date, OldName varchar(20), NewName varchar(20) not null
primary key (Date, OldName)
);
-- The real table also have the following CK
-- create unique index IX_CK on @log (Date, NewName)
insert into @log values
('2012-01-01', 'aaa', 'bbb')
,('2012-01-02', 'bbb', 'ccc')
,('2012-01-03', 'ccc', 'bbb')
,('2012-01-04', 'bbb', 'ddd')
,('2012-01-05', 'ddd', 'eee')
,('2012-01-03', 'xx', 'yy')
,('2012-02-02', 'yy', 'zz')
,('2012-02-03', 'zz', 'xx')
;