Filtering by window function result in Postgresql
I don't know if this qualifies as "more elegant" but it is written in a different manner than Cybernate's solution (although it is essentially the same)
WITH window_table AS ( SELECT s.*, sum(volume) OVER previous_rows as total FROM stuff s WINDOW previous_rows as (ORDER BY priority desc ROWS between UNBOUNDED PRECEDING and CURRENT ROW)) SELECT * FROM window_tableWHERE total < 1000ORDER BY priority DESC
If by "more elegant" you mean something that avoids the sub-select, then the answer is "no"
I haven't worked with PostgreSQL. However, my best guess would be using an inline view.
SELECT a.*FROM ( SELECT s.*, sum(volume) OVER previous_rows AS total FROM stuff AS s WINDOW previous_rows AS ( ORDER BY priority desc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) ORDER BY priority DESC) AS aWHERE a.total < 1000;