Re: Antw: using max() aggregate

From: Louis-David Mitterrand <cunctator(at)apartia(dot)ch>
To: Gerhard Dieringer <DieringG(at)eba-haus(dot)de>
Cc: "<" <pgsql-sql(at)postgresql(dot)org>
Subject: Re: Antw: using max() aggregate
Date: 2000-06-16 10:54:53
Message-ID: 20000616125453.A501@styx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Fri, Jun 16, 2000 at 10:56:04AM +0200, Gerhard Dieringer wrote:
> > 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:
> >
> > SELECT title,stopdate
> > FROM auction
> > WHERE stopdate = (SELECT max(stopdate) FROM auction WHERE 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).
> > ...
>
> I don't see why you repeat your conditions in the outer select. The
> condition in the inner select drops all records that violate the
> conditions, so the same conditions in the outer select have nothing to
> do and you can leave them away.

Maybe mine was a bad example but if, for instance, you add a condition
on the "login" attribute (that it should start with a 'm'), then if you
omit the clause from the outer select you risk having a false match if
two records have the same stopdate:

SELECT title,login,stopdate
FROM auction
WHERE stopdate = (SELECT max(stopdate) FROM auction WHERE login LIKE 'm%');

> Tom's solution has the drawback, that if you have more than one record
> with the same max value you only get one of them, but may be that you
> want to see all of them.

True.

Thanks,

--
Louis-David Mitterrand - ldm(at)apartia(dot)org - http://www.apartia.fr

Save the whales. Feed the hungry. Free the mallocs.

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Joseph Shraibman 2000-06-16 19:09:03 BETWEEN
Previous Message Gerhard Dieringer 2000-06-16 08:56:04 Re: Antw: using max() aggregate