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

Общо... с обрат

Опитайте да създадете персонализирана агрегатна функция като:

CREATE FUNCTION quota_calc_func(numeric, numeric, numeric) -- carry over, daily usage and daily quota
RETURNS numeric AS 
$$
  SELECT GREATEST(0, $1 + $3 - $2);
$$
LANGUAGE SQL STRICT IMMUTABLE;

CREATE AGGREGATE quota_calc( numeric, numeric ) -- daily usage and daily quota
(
    SFUNC = quota_calc_func,
    STYPE = numeric,
    INITCOND = '0'
);

WITH t(x, y) AS (
  VALUES (2, '2013-09-16'),
              (0, '2013-09-17'),
              (3, '2013-09-18'),
              (0, '2013-09-19'),
              (7, '2013-09-20'),
              (1, '2013-09-21'),
              (0, '2013-09-22'),
              (2, '2013-09-23'),
              (1, '2013-09-24'),
              (9, '2013-09-25')
)
SELECT x, y, quota_calc(x, 2) over (order by y)
FROM t;

Може да съдържа грешки, не съм го тествал.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres jsonb_set актуализация на множество ключове

  2. Клас на JPA модел за поле TIMESTAMP БЕЗ ЧАСОВА ЗОНА ПО ПОДРАЗБИРАНЕ CURRENT_TIMESTAMP в Postgres?

  3. JOOQ не генерира претоварени процедури със стойност на таблица от PostgreSql

  4. няма запис pg_hba.conf за хост

  5. Получаване на размера на множество таблици в една заявка POSTGRES?