FILTER clause for non-aggregate window functions - Mailing list pgsql-sql

From Андрей Жиденков
Subject FILTER clause for non-aggregate window functions
Date
Msg-id CAN=gQ4AG_XxuTSq2brj3GY_MK-Qc+KwnETQiMXGmycsgy_Mbhw@mail.gmail.com
Whole thread Raw
Responses Re: FILTER clause for non-aggregate window functions
List pgsql-sql
I need to find the first date value in widow which meets certain conditions. In my case I use min() function with CASE like this:

SELECT min(CASE WHEN <conditions> THEN <date_field> end) OVER (PARTITION BY .. ORDER BY <date_field> ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)

But this is too slow mainly because of min() should read all tuples in window, I guess. So I tried to use first_value() function like this:

SELECT first_value(<date_field>) FILTER(WHERE <conditions>) OVER (PARTITION BY .. ORDER BY <date_field> ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)

But I got this error:

FILTER is not implemented for non-aggregate window functions

Why FILTER is not implemented for non-aggregate functions? Is there some restrictions in PostgreSQL executor core or maybe this behavior will lead to some conflicts? Is there a way to find needed value without scanning all tuples in window? Any help would be greatly appreciated.

--
Andrey Zhidenkov

pgsql-sql by date:

Previous
From: Andreas Kretschmer
Date:
Subject: Re: Windowing ?
Next
From: Tom Lane
Date:
Subject: Re: FILTER clause for non-aggregate window functions