2011-03-03 43 views
0

很难,即使我的英文,所以我要告诉我想要什么,通过下面的例子来解释:如何只能选择改变的值

比如我有一个表,如:

日期ID瓦尔

SomeDate.... 1 0 
SomeDate.... 2 0 
SomeDate.... 2 0 
SomeDate.... 1 0 
SomeDate.... 1 0 
SomeDate.... 1 1 
SomeDate.... 1 1 
SomeDate.... 2 1 
SomeDate.... 1 0 
SomeDate.... 2 0 
SomeDate.... 1 0 
SomeDate.... 1 1 

所以我要注册只改变值喜欢:

SomeDate.... 1 1 //registered 0 -> 1 for ID 1 
SomeDate.... 2 1 //registered 0 -> 1 for ID 2 
SomeDate.... 1 0 //registered 1 -> 0 for ID 1 
SomeDate.... 2 0 //registered 1 -> 0 for ID 2 
SomeDate.... 1 1 //registered 0 -> 1 for ID 1 

MS SQL SERVER 2008

也许有人为例或任何想法,我怎么能够实现这些改变,谢谢。

+0

您是否在尝试查找ID和Val的所有唯一组合? – 2011-03-03 05:59:31

+0

@Abe Miessler不,我修正了一个例子,我想注册这个变化。 – Cynede 2011-03-03 06:10:00

回答

2

像下面这样的东西可能会诀窍。

;With RankedDates As 
    (
    Select T1.[Date], T1.ID, T1.Val 
     , Row_Number() Over(Partition By T1.ID Order By T1.[Date]) As Num 
    From SourceTable As T1 
    ) 
Select T1.[Date], T1.ID 
    , T1.Val As InitialValue 
    , T2.Val As ChangedToValue 
    , T2.[Date] As ChangedDate 
From RankedDates As T1 
    Join RankedDates As T2 
     On T2.ID = T1.ID 
      And T2.Num = T1.Num + 1 
      And T2.Val <> T1.Val 
Order By T1.ID 
+0

这真是太棒了,非常感谢您的解答! – Cynede 2011-03-03 06:46:34