sql >> Databasteknik >  >> RDS >> PostgreSQL

Totalt... med en twist

Prova att skapa en anpassad aggregatfunktion som:

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;

Kan innehålla buggar, har inte testat det.



  1. använder Oracle JDBC-drivrutin implicit cachingfunktion

  2. Proaktiv PostgreSQL-övervakning (utvecklarstudio/rådgivares vinkel)

  3. Räkna instanser i Tabell1 OCH länka till Tabell2

  4. Grundläggande säkerhet, PHP mySQl