我有以下文件名更改日志表。获取最旧的名字(递归)?
ChangeNameLog(日期,OLDNAME,新名称)
主键:日期,OLDNAME
表的数据看起来像
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改为YY,然后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')
;
我不确定,但我相当肯定你需要更具体和更深入的解释你所面临的问题,以便接收任何有用的答案。 – Zyerah 2012-02-24 23:47:27
看看:http://stackoverflow.com/questions/1757370/recursive-same-table-query-in-sql-server-2008其中处理同样的事情(递归查询) – Eddy 2012-02-24 23:57:18
CTE是唯一的方法。 – SQLMason 2012-02-25 00:28:04