Oft ist es nötig, die prozentuelle Veränderung zwischen zwei oder mehreren Perioden auszuwerten. Das folgende Beispiel zeigt, wie das idealerweise gemacht werden kann:
test=# SELECT tstamp, revenue, round((revenue::numeric - delay) / revenue * 100, 2) || ' %' AS growth FROM (SELECT tstamp, revenue, lag(revenue, 1) OVER (ORDER BY tstamp) AS delay FROM t_business WHERE country = 'DE' ORDER BY tstamp) AS x; tstamp | revenue | growth ------------+---------+---------- 2009-10-01 | 20 | 2009-10-02 | 18 | -11.11 % 2009-10-03 | 23 | 21.74 % 2009-10-04 | 26 | 11.54 % (4 rows)
Wir schieben die Windowing Function einfach in ein Subselect und berechnen dann im nachgelagerten Code die Differenz und formatieren den String entsprechend.