[Pgsql-ayuda] Maximo

Haroldo Stenger hstenger@adinet.com.uy
Sat, 22 Nov 2003 21:08:10 -0300


Saludos a todos, en especial a Alvaro Herrera, y felicitaciones
por PostgreSQL 7.4 :-)

Recientemente tuve que encarar un problema para el cual el lenguaje SQL
en principio parece muy bien preparado: obtener el valor de una columna
correspondiente al maximo valor de una segunda columna para cada grupo
de valores iguales de una tercera columna.

Pongo un ejemplo:

Tabla Historia de precios (hisprec)
-----------------------------------
Codigo de articulo, numerico(6)
Fecha, date
Precio, numeric(9,2)

La solucion que encontre (previa visita a #postgresql en irc):

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 ;

donde fecha_limite es una fecha costante.

es decir, para poder resolver el problema, primero hay que
encontrar la fecha maxima anterior a fecha_limite, para luego usarla
como clave de busqueda en la propia tabla de historia, y asi
obtener el precio final. 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.

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

Gracias

Saludos
Haroldo