update ab einer bestimmten Summe

Hallo,
Ich möchte für eine Abrechnung erreichen:
Summiere ich datumssortiert Werte auf, dann hätte ich gerne bei Erreichen einer bestimmten Summe bei allen folgenden Datensätzen einen Rabatt eingetragen.

Beispiel

create temp table t 
 (id integer not null, datum date, val integer, rabatt integer);

insert into t 
values(1 , '2016-07-01', 2), (2, '2016-07-02', 2), (3, '2016-07-03', 3), 
      (4, '2016-07-04', 1), (5, '2016-07-05', 3), (6, '2016-07-06', 2);

Summe bis inkl. den 4.7. sind 8
-> alle Datensätze ab 5.7. sollen im Feld rabatt einen Wert erhalten

Mit Schleife in PL/pgSQL kein Problem, aber das geht doch bestimmt eleganter?

Grüße
Uli

test=*# select *, case when sum(val) over (order by datum) >= 8 then true else false end as r from t;
 id |   datum    | val | rabatt | r 
----+------------+-----+--------+---
  1 | 2016-07-01 |   2 |        | f
  2 | 2016-07-02 |   2 |        | f
  3 | 2016-07-03 |   3 |        | f
  4 | 2016-07-04 |   1 |        | t
  5 | 2016-07-05 |   3 |        | t
  6 | 2016-07-06 |   2 |        | t
(6 Zeilen)

test=*#

alles klar?

Super, vielen Dank!
Das ging ja mit Überschall.

Tja, das macht ein Bot :wink: