Функция вывода и разделения - PullRequest
1 голос
/ 26 марта 2019

Это моя входная таблица

create table #table1 (id int, FN varchar(20), startdate varchar(20), id1  varchar)

insert #table1
  select 1, 'Joe', '2019-01-01', 'A'
  union select 1, 'Joe', '2019-01-01', 'B'
  union select 1, 'Joe', '2019-01-05', 'C'
  union select 1, 'Joe', '2019-01-05', 'D'
  union select 1, 'Joe', '2019-01-06', 'E'
  union select 2, 'john', '2019-01-05', 'F'
  union select 2, 'john', '2019-01-06', 'G'
  union select 2, 'john', '2019-01-06', 'H'
  union select 2, 'john', '2019-01-07', 'I'

Я попробовал следующий код

 select *
   , dense_rank() OVER (partition by id, fn  order by startdate) 
   , lead(startdate,1) OVER (partition by id, fn order by startdate) 
 from #table1
 order by id

output

Но мне требуется следующий вывод:

Expected output

1 Ответ

1 голос
/ 26 марта 2019

Я знаю, что может быть лучший подход, но, по крайней мере, это рабочее решение:

select *, 
      (select MIN(startdate) 
       from #table1 t1 
       where t1.id = #table1.id and 
             t1.fn = #table1.fn and 
             t1.startdate > #table1.startdate) enddate
from #table1

Результат

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...