【发布时间】:2012-02-26 11:30:12
【问题描述】:
我有以下文件名更改日志表。
ChangeNameLog(Date, OldName, NewName)
主键:日期,旧名称
表格的数据是这样的
日期 旧名称 新名称 1/1 aa bbb 1/2 bbb ccc 1/3 立方厘米 bbb 1/4 bbb ddd 2/1 xx 年 2/2 年年(文件名aaa改成bbb,再改成ccc,bbb,ddd 稍后
文件名xx改为yy,再改为zz)
我想为所有新名称获取最旧的名称。结果看起来像
日期 NewName OldestName 1/2 bbb aaa 1/3 立方厘米 aaa 1/4 ddd aaa 2/1 年年月日 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')
;
【问题讨论】:
-
我不确定,但我相当肯定您需要更具体、更深入地解释您所面临的问题才能获得任何有用的答案。跨度>
-
看看:stackoverflow.com/questions/1757370/… 处理同样的事情(递归查询)
-
您在日志中真的没有任何其他信息可以识别文件吗?是什么阻止您添加像
('2012-02-04', 'xx', 'eee')这样的行?那么接下来从'eee' -> anything else重命名,属于哪一个呢? -
@AaronBertrand 如果已经有一个名为
eee的文件,则不可能有像('2012-02-04', 'xx', 'eee')这样的行。如果eee不再存在,那么“Anything else”应该具有原始名称“xx”。 -
你是如何限制这个的?当然,除了名称之外,您还有其他方法可以识别文件...
标签: sql-server sql-server-2008