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
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 |