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