Трябва да идентифицирате групи от последователни дни, където oos =1 или 0. Това може да стане с помощта на функцията LAG, за да се намери кога се променя колоната oos и след това да се сумира върху нея.
с x (s_date,qty,oos,chg) като ( изберете s_date,qty,oos, случай, когато oos =lag(oos,1) над (подреждане по s_date), след това 0, иначе 1 край от stk ) изберете s_date,qty,oos, sum(chg) над (поръчайте по s_date) grpfrom x;
изход :
<предварителен код>| S_DATE | КОЛИЧЕСТВО | OOS | GRP ||--------------------------------|-----|-----|-- ---|| 01 януари 2013 г. 00:00:00+0000 | 0 | 1 | 1 || 02 януари 2013 г. 00:00:00+0000 | 0 | 1 | 1 || 03 януари 2013 г. 00:00:00+0000 | 0 | 1 | 1 || 04 януари 2013 г. 00:00:00+0000 | 5 | 0 | 2 || 05 януари 2013 г. 00:00:00+0000 | 0 | 1 | 3 || 06 януари 2013 г. 00:00:00+0000 | 0 | 1 | 3 |След това можете да сумирате този oos, разделен по колона grp, за да получите последователни oos дни.
с x (s_date,qty,oos,chg) като ( изберете s_date,qty,oos, случай, когато oos =lag(oos,1) над (подреждане по s_date), след това 0, иначе 1 край от stk ) ,y (s_date,qty,oos,grp) като (изберете s_date,qty,oos, sum(chg) над (подреждане по s_date) от x )изберете s_date,qty,oos, sum(oos) над (разделяне по ред на grp до s_date) cum_days_oosfrom y;
изход:
<предварителен код>| S_DATE | КОЛИЧЕСТВО | OOS | CUM_DAYS_OOS ||--------------------------------|-----|-----|-- ------------|| 01 януари 2013 г. 00:00:00+0000 | 0 | 1 | 1 || 02 януари 2013 г. 00:00:00+0000 | 0 | 1 | 2 || 03 януари 2013 г. 00:00:00+0000 | 0 | 1 | 3 || 04 януари 2013 г. 00:00:00+0000 | 5 | 0 | 0 || 05 януари 2013 г. 00:00:00+0000 | 0 | 1 | 1 || 06 януари 2013 г. 00:00:00+0000 | 0 | 1 | 2 |Демо в sqlfiddle.