Выберите значение инициализации при обнаружении запроса на изменение значения - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть запрос, в котором я обнаруживаю изменение значения

            With RankedDates As
            (
                Select T1.RecTime, T1.Col, T1.Message, T1.ismsg
                    , Row_Number() Over( Partition By T1.Col Order By T1.[RecTime] ) As Num
                From [ActvXDeltaOut] As T1
            )
            Select T1.[RecTime], T1.Col
                , T1.Message As InitialValue
                , T1.ismsg As Value
                , T2.[RecTime] As ChangedDate
            From RankedDates As T1
                Join RankedDates As T2
                    On T2.Col = T1.Col
                        And T2.Num = T1.Num + 1
                        And T2.ismsg <> T1.ismsg

Но когда первое значение равно 1, мне нужно также сохранить этот узел, поэтому начальное значение должно быть 0, а не первое значение из запроса, потому что если я получу 1-> 0, я никогда не узнаю, что было 1, но мне нужно знаю это. И если есть 0, мне все равно.

например, если я получил первый узел одинаково:

2011-03-01 00: 00: 00.000 1 Сообщение

Мне нужно это получить.

добавлено:

У меня есть стек данных без T2.ismsg <> T1.ismsg :

2011-03-01 00: 00: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 00: 10: 00.000 2011-03-01 00: 10: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 00: 20: 00.000 2011-03-01 00: 20: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 00: 30: 00.000 2011-03-01 00: 30: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 00: 40: 00.000 2011-03-01 00: 40: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 00: 50: 00.000 2011-03-01 00: 50: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 01: 00: 00.000 2011-03-01 01: 00: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 01: 10: 00.000 2011-03-01 01: 10: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 01: 20: 00.000 2011-03-01 01: 20: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 01: 30: 00.000 2011-03-01 01: 30: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 01: 40: 00.000 2011-03-01 01: 40: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 01: 50: 01.000 2011-03-01 01: 50: 01.000 PBSU311PBSU311_F Длинное сообщение1 2011-03-01 02: 00: 01.000 2011-03-01 02: 00: 01.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 02: 10: 01.000 2011-03-01 02: 10: 01.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 02: 20: 01.000 2011-03-01 02: 20: 01.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 02: 30: 01.000

с T2.ismsg <> T1.ismsg У меня ничего нет

Если сначала ismsg = 1, как я здесь, для каждого Col (T2.Col = T1.Col) мне нужно вывести этот первый узел, например:

2011-03-01 00: 00: 00.000 PBSU311PBSU311_F Длинное сообщение 1 2011-03-01 00: 10: 00.000

Так что мне нужно как-то инициализировать ismsg по умолчанию для всех Cols, чтобы получить 0, чтобы получитьон

1 Ответ

1 голос
/ 19 апреля 2011

Введите:

        From RankedDates As T1
            Right Join RankedDates As T2
                On T2.Col = T1.Col
                   And T2.Num = T1.Num + 1
        Where T2.ismsg <> T1.ismsg
           Or T1.Col IS NULL

Можете ли вы попробовать:

        From RankedDates As T1
            Join RankedDates As T2
                On T2.Col = T1.Col
                    And T2.Num = T1.Num + 1
        Where T2.ismsg <> T1.ismsg
            Or ( T1.ismsg = 1
                And T1.Num = 1
               ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...