Нахождение последовательности дат - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть такая таблица:

id             date        
1             2018-01-01 01:01
2             2018-01-02 14:00
3             2018-01-01 05:00  -- affected
4             2018-01-03 16:0

Я хотел найти последовательность дат (по циклу) независимо от того, находится ли она в порядке возрастания или нет, если нет, то вставить в другую таблицу, как эта:

также вставил предыдущее и следующее значение затронутых дат.

 id             date        
    2             2018-01-02 14:00
    3             2018-01-01 05:00  
    4             2018-01-03 16:00

Можете ли вы, ребята, помочь мне в этом?спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

сначала вы найдете строку ошибки, затем просто получите строку до и после.

Если идентификатор не является непрерывным, то используйте row_number(), чтобы сгенерировать непрерывную последовательность №

; with 
tbl as      -- sample data
(
    select id = 1, date = '2018-01-01 01:01'    union all
    select id = 2, date = '2018-01-02 14:00'    union all
    select id = 3, date = '2018-01-01 05:00'    union all
    select id = 4, date = '2018-01-03 16:00'
),
cte as      -- the query
(
    select  *,
            prev    = LAG (date) OVER (ORDER BY id),
            seq     = ROW_NUMBER() OVER (ORDER BY id)   -- added this
    from    tbl t
),
err as      -- the error rows
(
    select  *
    from    cte
    where   date    < prev  
)
            -- the final result
select  c.*
from    err e
        inner join cte c    on  c.seq   >= e.seq - 1
                           and  c.seq   <= e.seq + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...