sql >> Databáze >  >> RDS >> PostgreSQL

Průběh celkem... s obratem

Zkuste vytvořit vlastní agregační funkci jako:

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;

Může obsahovat chyby, netestovali jsme to.



  1. Jak cbrt() funguje v PostgreSQL

  2. SQL SELECT WHERE řádek obsahuje slovo

  3. T-SQL - Aliasing pomocí =versus as

  4. Jak získat počet lidí na základě věkových skupin pomocí SQL dotazu v databázi Oracle?