From: Aaron Bono <postgresql@aranya.com>
To: Worky Workerson <worky.workerson@gmail.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: Displaying first, last, count columns
Date: Wed, 21 Jun 2006 10:10:48 -0500
Message-ID: <bf05e51c0606210810x26ecb272t6d873a0bcbddfb03@mail.gmail.com> (raw)
In-Reply-To: <ce4072df0606210755j40941cf7v44648f2a0e69be56@mail.gmail.com>
References: <ce4072df0606210755j40941cf7v44648f2a0e69be56@mail.gmail.com>
I would suggest:
select
max(time_occurred) AS last_seen,
min(time_occurred) AS first_seen,
count(*),
prog_data
from t
group by
prog_data
I would also suggest you use inner joins rather than put all your tables in
the from and join in the where clause. It is much easier to read and
understand what you are trying to do. The query you have is not exactly the
same as what I put above but I bet the performance is bad because you have
inner queries that have constraints based on the outer query. I usually
avoid this as much as possible.
-Aaron Bono
On 6/21/06, Worky Workerson <worky.workerson@gmail.com> wrote:
>
> I'm having a bit of a brain freeze and can't seem to come up with
> decent SQL for the following problem:
>
> I have a table "t" of the form "time_occurred TIMESTAMP, prog_data
> VARCHAR" and would like to create a query that outputs something of
> the form "first_seen, last_seen, count, prog_data".
>
> I have the current query which gets the first_seen and last_seen via
> subqueries, ala
>
> SELECT t1.time_occurred AS first_seen, t2.time_occurred AS last_seen,
> t3.count, t1.prog_data
> FROM t AS t1, t AS t2
> WHERE t1.prog_data = t2.prog_data
> AND t1.time_occurred IN (SELECT min(time_occurred) FROM t WHERE
> prog_data = t1.prog_data)
> AND t2.time_occurred IN (SELECT max(time_occurred) FROM t WHERE
> prog_data = t1.prog_data)
>
> but I can't seem to work out how to get the count of all the records
> that have. I figure that this is probably a relatively common idiom
> ... can anyone suggest ways to go about doing this. Also, the
> performance of this is pretty horrible, but I figure that creating a
> column on t.prog_data should speed things up noticably, right?
>
> Thanks!
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: postgresql@aranya.com, worky.workerson@gmail.com
Subject: Re: Displaying first, last, count columns
In-Reply-To: <bf05e51c0606210810x26ecb272t6d873a0bcbddfb03@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox