Re: Advance SQL subquery

From: David Fetter <david(at)fetter(dot)org>
To: AnthonyV <avequeau(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Advance SQL subquery
Date: 2009-09-23 16:40:08
Message-ID: 20090923164008.GX31599@fetter.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, Sep 23, 2009 at 05:13:34AM -0700, AnthonyV wrote:
> Hello,
>
> I have a table like :
>
> date | value
> -------------------------------
> 2009-09-19 | 1
> 2009-09-20 | 2
> 2009-09-21 | 6
> 2009-09-22 | 9
> 2009-09-23 | 1
>
> I'd like a request which gives me the sum of each last n days.
> For example, if I want the sum of each 3 days, I want this result:
>
> date | sum_value
> -------------------------------
> 2009-09-19 | 1 (sum from 2009-09-17 to 2009-09-19)
> 2009-09-20 | 3 (sum from 2009-09-18 to 2009-09-20)
> 2009-09-21 | 9 (sum from 2009-09-19 to 2009-09-21)
> 2009-09-22 | 17 (sum from 2009-09-20 to 2009-09-22)
> 2009-09-23 | 16 (sum from 2009-09-21 to 2009-09-23)
>
> I try to make a subquery which is apply on each row of a query, but it
> does work.
>
> Has anybody an idea?

We've implemented part of the SQL standard windowing functions, but
not the part (ROWS BETWEEN M PRECEDING AND N FOLLOWING) that would
make this most convenient. What you can do instead is something like
this:

SELECT
"date",
(
value +
COALESCE(lag(value,1) OVER w, 0) +
COALESCE(lag(value,2) OVER w, 0)
) AS sum
FROM
your_log
WINDOW w AS (ORDER BY "date")
ORDER BY "date";

When we add (ROWS BETWEEN M PRECEDING AND N FOLLOWING) to the window,
you'll be able to use sum() and parameterize it like this:

SELECT
"date",
SUM (value) OVER w
FROM
your_log
WINDOW w AS (
ORDER BY "date"
ROWS BETWEEN
2 PRECEDING AND
CURRENT ROW
)
ORDER BY "date";

Cheers,
David.
--
David Fetter <david(at)fetter(dot)org> http://fetter.org/
Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter
Skype: davidfetter XMPP: david(dot)fetter(at)gmail(dot)com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Scott Marlowe 2009-09-23 17:05:43 Re: Help! Database restored with disabled triggers
Previous Message Tom Lane 2009-09-23 16:33:37 Re: Source for CreatedSharedMemoryAndSemaphores