Oft benötigt man ein und das selbe Window mehrmals innerhalb des selben SQL Statements. Um den Code ein wenig übersichtlicher zu gestalten, kann man die Definition der Partitions in einer WINDOW Clause zusammen fassen:
test=# SELECT rank() OVER (w),
tstamp, revenue,
sum(revenue) OVER (w) AS total
FROM t_business
WHERE country = 'DE'
WINDOW w AS (ORDER BY tstamp)
ORDER BY tstamp;
rank | tstamp | revenue | total
------+------------+---------+-------
1 | 2009-10-01 | 20 | 20
2 | 2009-10-02 | 18 | 38
3 | 2009-10-03 | 23 | 61
4 | 2009-10-04 | 26 | 87
(4 rows)
In unserem Beispiel wird w an zwei Stellen im Statement verwendet. Das Statement ist so bereits viel übersichtlicher.
Es ist klarerweise auch möglich, mehr wie ein Window zu definieren:
test=# SELECT rank() OVER (w),
tstamp, revenue,
sum(revenue) OVER (w) AS total,
rank() OVER (w2) AS best_days
FROM t_business
WHERE country = 'DE'
WINDOW w AS (ORDER BY tstamp),
w2 AS (ORDER BY revenue)
ORDER BY tstamp;
rank | tstamp | revenue | total | best_days
------+------------+---------+-------+-----------
1 | 2009-10-01 | 20 | 20 | 2
2 | 2009-10-02 | 18 | 38 | 1
3 | 2009-10-03 | 23 | 61 | 3
4 | 2009-10-04 | 26 | 87 | 4
(4 rows)
In unserem Beispiel haben wir zwei Windows definiert, die an unterschiedlicher Stelle in der Query jeweils zum Einsatz kommen.