SQL Server Проверьте, повторяется ли значение в следующей строке - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно проверить, повторяется ли значение строки в следующей строке.Если это так, то Билет все еще открыт, а если он закрыт, мне нужно показать значение в столбце Закрыто.

В приведенном ниже примере Билет 55 открыт с 1 по 7 мая, поэтому каждый день я показываюОн открывается в открытой колонке, и 7 мая билет закрывается, поэтому я показываю его как закрытый

         Ticket    Open  Closed 
5/1/2019    55      1   
5/2/2019    55      1   
5/3/2019    55      1   
5/4/2019    55      1   
5/5/2019    55      1   
5/6/2019    55      1   
5/7/2019    55      1   1
5/8/2019    60

Ответы [ 3 ]

1 голос
/ 10 мая 2019

Предполагая, что ticket и столбец даты, для которого вы не указали имя, не обнуляются, вы можете использовать lead(), чтобы получить следующий идентификатор билета, в котором записи упорядочены по столбцу даты, в котором вы не указали имя за. Если это ноль, это означает, что нет никаких последующих действий. Также с помощью lead() вы можете проверить, является ли дата следующей записи следующим днем.

SELECT ...
       CASE
         WHEN lead(ticket) OVER (PARTITION BY ticket
                                 ORDER BY <your anonymous date column>) IS NULL
               OR lead(<your anonymous date column>) OVER (PARTITION BY ticket
                                                           ORDER BY <your anonymous date column>) <> dateadd(day, 1, <your anonymous date column>) THEN
           1
       END closed,
       ...

Заменить <your anonymous date column> именем столбца даты.

1 голос
/ 10 мая 2019

Это то, что вы хотите?

select t.*,
       (case when date = max(date) over (partition by ticket)
             then 1 else 0
        end) as closed
from t;

Похоже, вы просто хотите 1 as open.

Если значения билетов могут повторяться, используйте lead():

select t.*,
       (case when ticket = lead(ticket) over (partition by ticket order by ticket)
             then 0 else 1
        end) as closed
from t;
0 голосов
/ 10 мая 2019

Если вы используете SQL Server 2012 или более позднюю версию, вы можете использовать LEAD(). Вот образец:

Я нашел следующий номер билета с помощью функции LEAD(), разделенной по TicketNumber. Если он возвращает значение, это означает, что заявка еще не закрыта. Если это ноль, билет закрывается.

SELECT    T.TicketDate
        , T.TicketNumber
        , CASE WHEN LEAD(T.TicketNumber) OVER (PARTITION BY T.TicketNumber ORDER BY T.TicketDate ) IS NULL THEN '' ELSE '1' END [Open]
        , CASE WHEN LEAD(T.TicketNumber) OVER (PARTITION BY T.TicketNumber ORDER BY T.TicketDate ) IS NULL THEN '1'ELSE '' END Closed
FROM Ticket T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...