PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menjalankan total ... dengan twist

Coba buat fungsi agregat khusus seperti:

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;

Mungkin mengandung bug, belum diuji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Padat_rank Oracle pertama ke Postgresql mengonversi

  2. Sekuel menyimpan banyak ke banyak

  3. Postgres menyetel komit otomatis secara global

  4. Menggabungkan interval waktu yang tumpang tindih, bagaimana?

  5. Apakah ada cara agar PostgreSQL tidak menciutkan tanda baca dan spasi saat menyusun menggunakan bahasa?