RE: Select most recent record?

From: "Marc Sherman" <msherman(at)projectile(dot)ca>
To: "pgsql-sql List" <pgsql-sql(at)postgresql(dot)org>
Subject: RE: Select most recent record?
Date: 2001-05-16 14:52:31
Message-ID: CGEPKMKAIFJINAOACFFEGEJHCGAA.msherman@projectile.ca
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

From: Tom Lane [mailto:tgl(at)sss(dot)pgh(dot)pa(dot)us]
>
> "Marc Sherman" <msherman(at)projectile(dot)ca> writes:
> > I'd like to select the newest (max(timestamp)) row for each id,
> > before a given cutoff date; is this possible?
>
> select * from log order by timestamp desc limit 1;

Heh. I obviously simplified my situation too much.

This is closer to what I've really got:

create table user (userid int4 primary key, groupid int4);
create table log (userid int4, timestamp datetime, value int4);

I need to select sum(value) for each group, where the values chosen
are the newest log entry for each group member that is before a cutoff
date (April 1, 2001).

Here's what I'm currently using:

select user.groupid, sum(l1.value)
from log as l1, user
where user.userid=log.userid
and log.timestamp in (
select max(timestamp) from log
where log.timestamp<'2001-04-01'
and log.userid=l1.userid)
group by user.groupid;

When I first posted, this was _very_ slow. I've since improved
it by adding an index on log(userid,timestamp) - now it's just
slow. If anyone knows how to make it faster, I'd appreciate it.

- Marc

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Adam Doligalski 2001-05-16 14:56:15 oid and triggers
Previous Message Michael Ansley (UK) 2001-05-16 14:50:38 RE: Select most recent record?