Re: DISTINCT ON without ORDER BY

Поиск
Список
Период
Сортировка
От Gregory Stark
Тема Re: DISTINCT ON without ORDER BY
Дата
Msg-id 87ocurwrcz.fsf@oxford.xeocode.com
обсуждение исходный текст
Ответ на DISTINCT ON without ORDER BY  (Martijn van Oosterhout <kleptog@svana.org>)
Список pgsql-general
Martijn van Oosterhout <kleptog@svana.org> writes:

> SELECT * FROM foo
> WHERE id in (SELECT max(id) FROM foo GROUP BY bar);
>
> Is there a way to acheive the above result without a sort and without a
> self-join?

Something like

SELECT bar, (magic_agg_func(foo)).* FROM foo GROUP BY bar

where you define an aggregate function magic_agg_func to remember the whole
record for the largest value of id. Something like:

postgres=# create function magic_transition(a,a) returns a as 'select case when $1.aid > $2.aid then $1 else $2 end'
languagesql; 
postgres=# create aggregate magic (a) (sfunc = magic_transition, stype = a);

Not sure it'll be faster though.

--
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com
  Ask me about EnterpriseDB's On-Demand Production Tuning

В списке pgsql-general по дате отправления:

Предыдущее
От: Scott Marlowe
Дата:
Сообщение: Re: Frequently unable connecting to db "server doesn't listen"
Следующее
От: Gregory Stark
Дата:
Сообщение: Re: Nooby Q: Should this take five hours? And counting?