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

Провеждане на обща сума върху повтаряща се група по елементи въз основа на време в Oracle SQL

За да получите сумите, които търсите, имате нужда от начин да групирате стойностите, които ви интересуват. Можете да генерирате групиращ идентификатор, като използвате няколко ROW_NUMBER аналитични функции, едната разделена от ключовата стойност. Въпреки това поради необходимостта ви да дублирате KEY стойности на колони, това ще трябва да се направи на няколко етапа:

WITH t1 AS (
  SELECT dta.*
       , last_value(KEY IGNORE NULLS)          -- Fill in the missing
               OVER (ORDER BY TIME ASC) key2   -- key values
    FROM your_data dta
), t2 AS (
  SELECT t1.*
       , row_number() OVER (ORDER BY TIME)     -- Generate a
       - row_number() OVER (PARTITION BY key2  -- grouping ID
                                ORDER BY TIME) gp
    FROM t1
)
SELECT t2.*
     , sum(amt) OVER (PARTITION BY gp, key2
                          ORDER BY TIME) running_sums
  FROM t2;

Горната заявка създава текуща сума от AMT, която се рестартира всеки път, когато стойността на ключа се промени. Като има предвид, че следната заявка, използвана на мястото на последния израз за избор по-горе, дава исканите резултати, които не бих нарекъл текуща сума.

SELECT key2
     , MIN(TIME) start_time
     , MAX(TIME) stop_time
     , sum(amt) amt
  FROM t2
 GROUP BY key2, gp;

За да видите стойностите на пълното време, може да искате или да промените сесията си NLS_DATE_FORMAT както по-долу:

ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-RRRR HH24:MI:SS';

Или обвийте всяка колона с дата в TO_CHAR функция за изходни цели.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Замяна или премахване на няколко реда текст в съхранена процедура на Oracle

  2. Актуализирайте изявление с вътрешно присъединяване на Oracle

  3. Oracle SQL:Филтрирането по ROWNUM не връща резултати, когато трябва

  4. Oracle SQL:Колона не е разрешена

  5. Как да направя заявка за разрешения за директория на Oracle?