> Working as documented: > > "A window function call always contains an OVER clause directly following > the window function's name and argument(s)"
Yeah, how else would the window function know which window clause it belongs to?
If you'd done: SELECT (LEAD(col) - LAG(col)) OVER (...) could PostgreSQL just assume that you meant to link both the lead and lag to the same over clause?
Well, if there is only a single aggregate function in the expression there isn't any ambiguity. If there happened to be more than one the system could emit a parsing error saying as much. While likely more user-friendly I don't imagine its worth the headache in the parser.
I did kinda mis-speak earlier though - there probably aren't any expressions that require a window function to end up in a subquery, but usually if I get to the point of using complex expressions readability will lead me to do so.