PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Razem... z niespodzianką

Spróbuj utworzyć niestandardową funkcję agregującą, taką jak:

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;

Może zawierać błędy, nie testowałem tego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę dołączyć do tabeli pochodnej?

  2. Importujesz schemat xml do postgres, aby automatycznie utworzyć tabelę, a następnie wypełnić ją plikiem xml?

  3. Reprezentacja bajtów PostgreSQL 9.X w 'hex' lub 'escape' dla miniaturek

  4. INSERT i serializacja transakcji w PostreSQL

  5. Jak w naturalny sposób połączyć dwa zapytania z klauzulą?