2009/3/4 Emiliano Moscato <moski...@gmail.com>:
> 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

Responder a