On Fri, Jun 16, 2000 at 09:28:27AM +0200, Gerhard Dieringer wrote:
> > I am trying to return the most recently updated record from a table:
> > SELECT max(stopdate) FROM auction;
> > and this works but only returns the timestamp, however if I try to get
> > another column with the aggregate it fails:
> > SELECT title,max(stopdate) FROM auction;
> > ERROR: Attribute auction.title must be GROUPed or used in an aggregate function
> > Ok, so I group it now:
> > SELECT title,max(stopdate) FROM auction GROUP BY title;
> > title | max
> > ---------------+------------------------
> > dfsdfsdf | 2000-07-10 05:00:00+02
> > dssdfsdfsdfsf | 2000-07-09 16:00:00+02
> > sdfsdfsdfsdf | 2001-04-10 15:00:00+02
> > (3 rows)
> > But the problem is that I now get three rows when I only want the max()
> > item.
> SELECT title,stopdate
> FROM auction
> WHERE stopdate = (SELECT max(stopdate) FROM auction);
> should work.
Thanks for your suggestion.
Yes this would work nicely but if I need to add more conditional clauses
I have to duplicate them in the main SELECT and in the sub-SELECT:
WHERE stopdate = (SELECT max(stopdate) FROM auction AND stopdate > now())
AND stopdate > now();
Or am I missing something?
Tom Lane suggested using:
SELECT title,stopdate FROM auction ORDER BY stopdate LIMIT 1;
which seems the best solution (I was a bit concerned about performance,
but then again the max() aggregate does a scan of all rows as well).
Louis-David Mitterrand - ldm(at)apartia(dot)org - http://www.apartia.fr
This is Linux Country. On a quiet night you can hear Windows NT reboot.
pgsql-sql by date
|Next:||From: Gerhard Dieringer||Date: 2000-06-16 08:56:04|
|Subject: Re: Antw: using max() aggregate|
|Previous:||From: Gerhard Dieringer||Date: 2000-06-16 07:28:27|
|Subject: Antw: using max() aggregate|