Somebody on Freenode wanted this:
Source Result
+----+------+ +----+------+
| id | x | | id | c |
+----+------+ +----+------+
| 1 | 1 | | 1 | 2 |
| 2 | 1 | | 2 | 2 |
| 3 | NULL | | 3 | NULL |
| 4 | NULL | -> | 4 | NULL |
| 5 | 1 | | 5 | 1 |
| 6 | NULL | | 6 | NULL |
| 7 | 1 | | 7 | 3 |
| 9 | 1 | | 9 | 3 |
| 10 | 1 | | 10 | 3 |
+----+------+ +----+------+
The result uses the NULL values in x as boundaries of windows,
and counts the number of rows within each window. I don’t know
why anyone wants such a thing; it is not ours to reason
why…
Anyway, the point is that you can use arbitrary expressions, even
subqueries, to define your window partitions.
SELECT
id,
-- Count of rows in windows bound by NULL values in x
IF(
x IS NULL,
NULL,
COUNT(*) OVER (PARTITION BY (
-- …
[Read more]