Обновите CTE, чтобы вставить дату создания новой цепочки записей - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующий CTE:

with cte as 
(
    select 
        fromtime,
        (case 
            when datediff(day, fromtime, totime) = 0
               then totime
            else dateadd(day, 1, convert(date, fromtime))
         end) as dayendtime,
        totime
    from 
        t
    union all
    select 
        dayendtime as fromtime,
        (case 
            when datediff(day, dayendtime, totime) = 0
               then totime
               else dateadd(day, 1, dayendtime)
         end) as dayendtime,
        totime
    from  
        cte
    where 
        dayendtime < totime
)

, который выводит такие данные:

enter image description here

И прекрасно работает, ноТеперь я хочу создать новую строку, связывающую DayEndTime с FromTime следующей записи, если DayEndTime - полночь, например:

enter image description here

Кто-нибудь может дать мне руководство о том, как это возможно?Спасибо!

1 Ответ

1 голос
/ 10 июля 2019
with cte 
as (
      select fromtime,
             (case when datediff(day, fromtime, totime) = 0
                   then totime
                   else dateadd(day, 1, convert(date, fromtime))
              end) as dayendtime,
             totime
      from t
      union all
      select dayendtime as fromtime,
             (case when datediff(day, dayendtime, totime) = 0
                   then totime
                   else dateadd(day, 1, dayendtime)
              end) as dayendtime,
             totime
       from cte
       where dayendtime < totime
),
cte_new 
as (
  SELECT dayendtime AS fromtime,totime AS dayendtime,totime 
  FROM cte
  WHERE dayendtime=cast(dayendtime AS date)
)
SELECT *
FROM cte
UNION ALL
SELECT *
FROM cte_new
ORDER BY fromtime;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...