SQL सर्वर में मेरे पास निम्न डेटा वाली एक तालिका है:

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
0
Steven 12 सितंबर 2018, 22:46

2 जवाब

सबसे बढ़िया उत्तर

मैं अनुमान लगा रहा हूं कि यह वास्तव में अंतराल और द्वीपों की समस्या है। यदि ऐसा है तो:

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;

यह समान गंभीरता के साथ आसन्न पंक्तियाँ प्राप्त करेगा।

1
Gordon Linoff 12 सितंबर 2018, 22:52

सबसे पहले एक टेबल बनाएं:

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"

रेक्सटेस्टर डेमो

1
Barbaros Özhan 12 सितंबर 2018, 23:40