From: | Bill Huff <bhuff(at)colltech(dot)com> |
---|---|
To: | Mont Erickson <mont(at)airswitch(dot)org> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Postgres SQL Query (Generating Date Groups) |
Date: | 2001-03-16 23:27:32 |
Message-ID: | 20010316172732.E28642@colltech.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Mont, you have probably gotten an answer on this already, but I haven't
seen one go across the list, so here goes.
Assuming that I understand what you want, the easiest way that I can
see to do it is by using self joins.
ie:
SELECT a.cust_id ,
sum(a.bytes) as period_1,
sum(b.bytes) as period_2,
sum(c.bytes) as period_3
sum(d.bytes) as period_4,
sum(e.bytes) as period_5
sum(f.bytes) as period_6
FROM table_a a, table_a b, table_a c, table_a d, table_a e, table_a f
WHERE a.cust_id = b.cust_id AND
b.cust_id = c.cust_id AND
c.cust_id = d.cust_id AND
d.cust_id = e.cust_id AND
e.cust_id = f.cust_id AND
a.usage_date = '2001-03-01' AND
b.usage_date = '2001-03-02' AND
c.usage_date = '2001-03-03' AND
d.usage_date = '2001-03-05' AND
e.usage_date = '2001-03-06' AND
f.usage_date = '2001-03-07'
GROUP BY a.cust_id;
This will work, but you will have to hardcode the query each time for the
number of your periods.
I hope that this helps.
--
Bill
On Thu, Mar 15, 2001 at 08:08:59PM -0700, Mont Erickson wrote:
> First of all, I apologize if I have posted to the wrong group...
>
> Here's the question.
>
> What would be the proper method, given the following table, to generate,
> with a single select query, a date grouped output:
>
> table_a
>
> cust_id | usage_date | bytes
> --------+------------+-------
> 1 | 2001-03-01 | 2578
> 1 | 2001-03-02 | 1234
> 2 | 2001-03-01 | 12345
> 1 | 2001-03-05 | 2578
> 1 | 2001-03-07 | 1234
> 2 | 2001-03-06 | 12345
>
> etc etc etc...
>
> I'm trying for output that would look something like this:
>
> cust_id | period_1 | period_2 | period_3
> --------+----------+----------+----------
> 1 | 12345678 | 457892 | 98765
> 2 | 10734 | 1037 | 8709
>
> ...etc etc etc...
>
> I have tried writing the query along the lines of the following, but
> based on the results I'm seeing, I'm on the wrong track:
>
> select
> cust_id,
> case when
> date_part('day',usage_date) >= 1 and date_part('day',usage_date)
> <= 7
> THEN sum(sum) END as period_1,
> case when
> date_part('day',usage_date) >= 2 and date_part('day',usage_date)
> <= 8
> THEN sum(sum) END as period_2,
> case when
> date_part('day',usage_date) >= 3 and date_part('day',usage_date)
> <= 9
> THEN sum(sum) END as period_3
> from table_a
> group by
> cust_id
>
> Is this possible under Postgres? What can I do to accomplish this
> without writing a separate select for each date period? Thank you in
> advance!
>
> Mont Erickson
> ns_monterickson(at)hotmail(dot)com (remove "ns_" to reply)
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://www.postgresql.org/search.mpl
--
_____
/ ___/___ | Bill Huff / bhuff(at)colltech(dot)com
/ /__ __/ | Voice: (512) 263-0770 x 262
/ /__/ / | Fax: (512) 263-8921
\___/ /ollective | Pager: 1-800-946-4646 # 1406217
\/echnologies |------[ http://www.colltech.com ] ------
From | Date | Subject | |
---|---|---|---|
Next Message | Mike Castle | 2001-03-16 23:28:37 | Re: Re: Re: Fast Inserts and Hardware Questions |
Previous Message | Steve Wolfe | 2001-03-16 23:18:31 | Re: URL for gmake |