Re: Why can't I use windowing functions over ordered aggregates?

From: Cédric Villemain <cedric(at)2ndquadrant(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Cc: Josh Berkus <josh(at)agliodbs(dot)com>
Subject: Re: Why can't I use windowing functions over ordered aggregates?
Date: 2013-06-21 16:02:35
Message-ID: 201306211802.40539.cedric@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Le vendredi 21 juin 2013 03:32:33, Josh Berkus a écrit :
> Hackers,
>
> So, I can create a custom aggregate "first" and do this:
>
> SELECT first(val order by ts desc) ...
>
> And I can do this:
>
> SELECT first_value(val) OVER (order by ts desc)
>
> ... but I can't do this:
>
> SELECT first_value(val order by ts desc)
>
> ... even though under the hood, it's the exact same operation.

First I'm not sure it is the same, in a window frame you have the notion of
peer-rows (when you use ORDER BY).

And also, first_value is a *window* function, not a simple aggregate
function...

See this example:
# create table foo (i int, t timestamptz);
# insert into foo select n, now() from generate_series(1,10) g(n);
# select i, first_value(i) over (order by t desc) from foo;
# select i, first_value(i) over (order by t desc ROWS between 0 PRECEDING and
UNBOUNDED FOLLOWING) from foo;

What do you expect "SELECT first(val order by ts desc)" to output ?

--
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jim Nasby 2013-06-21 16:48:35 Hardware donation
Previous Message Robert Haas 2013-06-21 15:34:43 Re: Add visibility map information to pg_freespace.