Как выбрать только меняющиеся значения - PullRequest
0 голосов
/ 03 марта 2011

Трудно объяснить даже с моим английским, поэтому я собираюсь показать, что я хочу, в следующем примере:

Например, у меня есть таблица типа:

Дата ID Val

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

Может быть, кто-то пример или какие-либо мысли о том, как я могу реализовать эти изменения, спасибо.

1 Ответ

2 голосов
/ 03 марта 2011

Что-то вроде следующего может помочь.

;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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...