आप done
. की संख्या की गणना करके समूहीकरण पैरामीटर असाइन कर सकते हैं प्रत्येक रिकॉर्ड से पहले रिकॉर्ड। बाकी सब सिर्फ एकत्रीकरण है, हालांकि प्रत्येक समूह के लिए एक पत्र निर्दिष्ट करना अनावश्यक जटिलता जैसा लगता है:
select grp as record, min(Date) as DateBegin,
max(case when Action = 'Done' then Date end) as DateEnd,
count(*) as NumActions,
sum(case when Action = 'Escalation' then 1 else 0 end) as NumEscalations
from (select e.*, coalesce(e2.grp, 0) as grp
from example e outer apply
(select count(*) as grp
from example e2
where e2.id < e.id and e2.Action = 'Done'
) e2
) e
group by grp;
SQL सर्वर 2012+ में यह क्वेरी सरल (और अधिक कुशल) होगी, जो संचयी रकम का समर्थन करती है।
संपादित करें:
मैंने देखा है कि मैं इसके लिए एक सबक्वायरी का उपयोग करता हूं, लेकिन यह आवश्यक नहीं है। इसे इस प्रकार लिखा जा सकता है:
select coalesce(grp, 0) as record, min(Date) as DateBegin,
max(case when Action = 'Done' then Date end) as DateEnd,
count(*) as NumActions,
sum(case when Action = 'Escalation' then 1 else 0 end) as NumEscalations
from example e outer apply
(select count(*) as grp
from example e2
where e2.id < e.id and e2.Action = 'Done'
) e2
group by e2.grp