[Pgsql-ayuda] Maximo

Alvaro Herrera alvherre@dcc.uchile.cl
Sun, 23 Nov 2003 12:53:48 -0300


On Sat, Nov 22, 2003 at 09:08:10PM -0300, Haroldo Stenger wrote:

Hola Haroldo,

¿Qué tal las Jornadas de Software Libre?  Veo bastante gente con
corbatas en las fotos ... creo que me sorprende un poco.  No vi a Justin
en el programa ... !?


> select hisprec.artcod,hisprec.precio
> from
>    (select hisprec.artcod as a, max(hisprec.fecha) as b
>       from hisprec
>       where hisprec.fecha<fecha_limite
>       group by hisprec.artcod) as t,
>    hisprec
> where t.a=hisprec.artcod and t.b=hisprec.fecha ;

Simpático ... es lo bueno de tener toda la potencia de la sintaxis SQL.
La gente acostumbrada, por ej., a MySQL, no puede hacer estas cosas
directamente.

¿Viste el plan de ejecución? (EXPLAIN ANALYZE)

> Me parece una solucion bella e imaginativa, pero no puedo dejar de
> preguntarme si no habra alguna solucion mas simple, sin subselect,
> alguna variante de la funcion max que en lugar de devolver el valor
> maximizado devuelva otro campo de la misma fila.

Supongo que una alternativa sería crear tu propia función de agregación,
pero francamente ignoro el nivel de dificultad que podría tener.  Por
otra parte, ¿realmente quieres buscar otra forma?  Recuerda, esto no es
Perl, así que basta con una forma de resolver el problema :-)

"There only one way to solve our query: Neo"
bah - de veras que esto no es Matrix.

Quizás puedas hacer un "self join" sin necesidad de una subconsulta,
pero en realidad no estoy seguro de si es posible.

> Que les parece? Que otros temas similares a este han encontrado?

Hmm... yo tengo un sistema que usa harto SQL complejo, pero creo que es
demasiado específico para servir de ejemplo general :-(
Lo malo es que el sistema genera parte de las consultas al vuelo, así
que extraerlas del código es difícil ...

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"I personally became interested in Linux while I was dating an English major
who wouldn't know an operating system if it walked up and bit him."
(Val Henson)