Oracle
 sql >> база данни >  >> RDS >> Oracle

Нулиране на кумулативна сума?

Трябва да идентифицирате групи от последователни дни, където 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Прочетете и импортирайте XLSX (Excel) файл в Oracle

  2. Какво може да причини промяна на Oracle ROWID?

  3. Обърнете в Oracle този път z/y/x към x/y/z

  4. MySQL еквивалент на SEQUENCE.NEXTVAL на Oracle

  5. Изчисляване на възрастта от рожден ден със задействане на oracle plsql и вмъкване на възрастта в таблицата