У меня есть набор результатов непрерывных дней и рейтинг серьезности. Я хотел бы объединить их в StartDate, EndDate, Severity - PullRequest
0 голосов
/ 12 сентября 2018

В SQL Server у меня есть таблица со следующими данными

Date        Severity
2018-09-10  40
2018-09-11  40
2018-09-12  40
2018-09-13  40
2018-09-14  40
2018-09-15  40
2018-09-16  20
2018-09-17  20
2018-09-18  20
2018-09-19  30
2018-09-20  30
2018-09-21  30
2018-09-22  30

Я хотел бы получить совокупность дат и серьезности

Start      End        Severity
2018-09-10 2018-09-15 40
2018-09-16 2018-09-18 20
2018-09-19 2018-09-22 30

Ответы [ 2 ]

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

Сначала создайте таблицу:

create table tab(Date date,Severity int);
insert into tab 
select '2018-09-10',40 union all
select '2018-09-11',40 union all
select '2018-09-12',40 union all     
select '2018-09-13',40 union all
select '2018-09-14',40 union all
select '2018-09-15',40 union all
select '2018-09-16',20 union all
select '2018-09-17',20 union all
select '2018-09-18',20 union all     
select '2018-09-19',30 union all
select '2018-09-20',30 union all
select '2018-09-21',30 union all     
select '2018-09-22',30;

и затем используйте:

select min(q."Start") as "Start", max(q."End") as "End", q.Severity
  from
    (
    select min(Date) as "Start",       
           max(Date) as "End",
           avg(Severity) as Severity
      from tab
     group by Date, Severity 
    ) q
 group by Severity   
 order by "Start"

Rextester Demo

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

Я предполагаю, что это действительно проблема пробелов и островов. Если так:

select severity, min(date), max(date)
from (select t.*,
             row_number() over (partition by severity order by date) as seqnum
      from t
     ) t
group by dateadd(day, - seqnum, date), severity;

Это приведет к тому, что смежные строки будут иметь одинаковую серьезность.

...