Re: Advance SQL subquery

Поиск
Список
Период
Сортировка
От David Fetter
Тема Re: Advance SQL subquery
Дата
Msg-id 20090923164008.GX31599@fetter.org
обсуждение исходный текст
Ответ на Advance SQL subquery  (AnthonyV <avequeau@gmail.com>)
Список 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@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@gmail.com

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

В списке pgsql-general по дате отправления:

Предыдущее
От: AnthonyV
Дата:
Сообщение: Re: Advance SQL subquery
Следующее
От: Scott Marlowe
Дата:
Сообщение: Re: Help! Database restored with disabled triggers