| 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: | Whole Thread | Raw Message | 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
| 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? |