2009/3/4 Emiliano Moscato <[email protected]>:
> Hola a todos!
>
> Cada tanto me encuentro con el mismo tipo de problema haciendo queries
> en postgres. Supongamos que tenemos el ejemplo del tutorial de
> Postgres (http://www.postgresql.org/docs/8.1/static/tutorial-agg.html):
>
> SELECT city, max(temp_lo)
> FROM weather
> GROUP BY city;
>
> city | max
> ---------------+-----
> Hayward | 37
> San Francisco | 46
> (2 rows)
>
> pero además querría saber en que fecha ocurrió dicha temperatura. Cuál
> sería la manera "más correcta" de hacerlo?
>
en que fecha o en que "fechas"... el hecho de que haya habido una
temperatura maxima no significa que haya ocurrido una sola vez...
> En mis tiempos de Mysql hacía algo del estilo, haciendo uso de los
> abusos del standard por parte de MYSQL:
>
> SELECT city, max(temp_lo), date
> FROM weather
> GROUP BY city;
>
lo cual claramente es incorrecto porque no estas definiendo que fecha
del grupo deseas obtener (es decir del grupo de veces en que en city
llego a haber temp_lo temperatura)
> pero en Postgres,si hago esto, me reclama que date no debe estar en el
> group by.
sera que te reclama que "debe" estar?
> Claramente, esto no sería útil, dado que al ponerlo en el
define "util"
> group by, me desagrega la maxima temperatura de la ciudad por dias.
>
en realidad lo agrupa por ciudad y fecha... no lo desagrega... ah!
bueno, eso es semantica!!!
> Cuál sería la manera correcta de hacer este query?
>
solo llego hasta aqui, no se me ocurre forma de filtrarlo mas... mas
que con una funcion...
SELECT city, date, temp_lo
FROM weather
WHERE (city,temp_lo) IN (SELECT city, max(temp_lo)
FROM weather
GROUP BY city)
--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Asesoría y desarrollo de sistemas
Guayaquil - Ecuador
Cel. +59387171157
--
TIP 4: No hagas 'kill -9' a postmaster