Re: select progressive total

From: "Merlin Moncure" <mmoncure(at)gmail(dot)com>
To: brian <brian(at)zijn-digital(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: select progressive total
Date: 2007-03-21 05:11:41
Message-ID: b42b73150703202211n3e61100dk6220e3f1c32e8895@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 3/21/07, brian <brian(at)zijn-digital(dot)com> wrote:
> From the "I thought this would be trivially easy" dept:
>
> I have a table holding member data for an organisation
>
> CREAT table member (
> id SERIAL PRIMARY KEY,
> applied date,
> ...
>
> and i'd like to plot the growth in memberships. I'd prefer to hand off
> the data already totaled, if possible.
>
> '2006-02-01', 452
> '2006-02-17', 453
> ...
>
> It semed to me that a self join was the way to go, but that route
> produced some flaky results. Here's my latest attempt:
>
> SELECT m1.applied AS date_applied, count(m2.id) AS num_applications
> FROM member m1, member m2 WHERE m1.applied <= m2.applied
> GROUP BY m1.applied ORDER BY date_applied ASC;
>
> The thing is, some applications fell on the same day, so i'm not even
> sure that this approach would work. Can anyone see where i'm going wrong
> here? And how can i handle applications that occurred on the same day?
> Can this even be done in a SELECT, or should i create a function?

you can do this with a subquery:

select
applied_date,
count(*),
(select count(*) from member m2 where m2.applied_date <
m1.applied_date) as total
from member m1
group by 1;

performance is going to suck for large tables because the subquery
will run once for every row returned by the group.

merlin

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Dhaval Shah 2007-03-21 06:25:26 Postgres Hot Standby. How or when does the recovery db move recovery.conf to recovery.done?
Previous Message Klint Gore 2007-03-21 02:02:21 Re: Approximate join on timestamps