Re: Windowing ?
Andreas Kretschmer <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.sql |
|---|---|
| Message-ID | <[email protected]> |
Am 11.12.2017 um 18:15 schrieb Andreas Kretschmer: > > > Am 11.12.2017 um 18:09 schrieb Olivier Leprêtre: >> >> Hi, >> >> I have a table describing sort of ordered road segments and their >> associated weight. I would like to calculate weight deltas between >> two consecutive segments. Problem is to substract previous from >> current row and reuses result as input for the next row. >> > > You can use the lag() - function. > > select ..., lag(weight) over (partition by road order by segment) ... > > sorry, my mistake, that was wrong. That should do the job: test=*# select * from xxx;  road | segment | weight ------+---------+--------    1 |      1 |    80    1 |      2 |     5    1 |      3 |     3    2 |      1 |    75    2 |      2 |     8    2 |      3 |    12    2 |      4 |     3 (7 Zeilen) test=*# select road, segment, weight, first_value(weight) over (partition by road order by segment) -y from (select *, sum(weight) over (partition by road order by segment) - first_value(weight) over (partition by road order by segment) as y from xxx) foo;  road | segment | weight | ?column? ------+---------+--------+----------    1 |      1 |    80 |      80    1 |      2 |     5 |      75    1 |      3 |     3 |      72    2 |      1 |    75 |      75    2 |      2 |     8 |      67    2 |      3 |    12 |      55    2 |      4 |     3 |      52 (7 Zeilen) Regards, Andreas -- 2ndQuadrant - The PostgreSQL Support Company. www.2ndQuadrant.com