我有以下文件名更改日誌表。獲取最舊的名字(遞歸)?
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