Re: Windowing ? - Mailing list pgsql-sql

From Andreas Kretschmer
Subject Re: Windowing ?
Date
Msg-id b1f465ad-05f6-49c6-21cb-6d9a0672f0f9@a-kretschmer.de
Whole thread Raw
In response to Re: Windowing ?  (Andreas Kretschmer <andreas@a-kretschmer.de>)
List pgsql-sql

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



pgsql-sql by date:

Previous
From: Andreas Kretschmer
Date:
Subject: Re: Windowing ?
Next
From: Андрей Жиденков
Date:
Subject: FILTER clause for non-aggregate window functions