[postgis-users] monthly climate query

Obe, Regina robe.dnd at cityofboston.gov
Tue Aug 14 13:13:45 PDT 2007


Wouldn't you want to return the average for month for that particular
site?  None of your month subselects seem to group by station id.  Would
seem to me logically you should add station_id to each of your
subselects, group by station_id as well as month and then your ON clause
would be month and station_id.
 
Hope that helps,
Regina

________________________________

From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Kirk
Wythers
Sent: Tuesday, August 14, 2007 12:15 PM
To: Discussion PostGIS Users
Subject: [postgis-users] monthly climate query


I need some help with rewriting a query. I have a query that dumps daily
climate data, filling in missing data with monthly averages (one line
per day).  


I want to output monthly averages (one line per month). I am having a
hard time wrapping my head around this. Particularly how to deal with
the doy column (day of year). I have tried several approaches and my
forehead is starting to get my keyboard bloody. 


Here is the daily query:


SELECT CASE
WHEN w.station_id = site_near.station_id THEN w.obs_id
ELSE s.obs_id
END AS obs_id,
site_near.station_id,
site_near.longname,
w.year,
w.doy,
--replace missing values (-999) with the monthly average
       CASE w.tmax
         WHEN -999 THEN avgtmax.avg
         ELSE w.tmax
       END,
CASE w.tmin
         WHEN -999 THEN avgtmin.avg
         ELSE w.tmin
       END,
CASE s.par
         WHEN -999 THEN avgpar.avg
         ELSE s.par
       END,
CASE w.precip
         WHEN -999 THEN avgprecip.avg
         ELSE w.precip
       END
FROM  site_near
       INNER JOIN solar s
         ON (site_near.ref_solar_station_id = s.station_id
             AND site_near.obs_year = s.year)
       INNER JOIN weather w
         ON (site_near.ref_weather_station_id = w.station_id
             AND site_near.obs_year = w.year
             AND s.date = w.date)
       INNER JOIN (SELECT   MONTH,
                            round(avg(tmax)::numeric, 2) AS avg
                   FROM     weather
                   WHERE    tmax != -999
                   GROUP BY MONTH) AS avgtmax
         ON (w.month = avgtmax.month)
INNER JOIN (SELECT   MONTH,
                            round(avg(tmin)::numeric, 2) AS avg
                   FROM     weather
                   WHERE    tmin != -999
                   GROUP BY MONTH) AS avgtmin
         ON (w.month = avgtmin.month)
       INNER JOIN (SELECT   MONTH,
                            round(avg(par)::numeric, 2) AS avg
                   FROM     solar
                   WHERE    par != -999
                   GROUP BY MONTH) AS avgpar
         ON (s.month = avgpar.month)
INNER JOIN (SELECT   MONTH,
                            round(avg(precip)::numeric, 2) AS avg
                   FROM     weather
                   WHERE    precip != -999
                   GROUP BY MONTH) AS avgprecip
         ON (w.month = avgprecip.month)
--select station to output climate data by id number
WHERE  w.station_id = 219101



-----------------------------------------
The substance of this message, including any attachments, may be
confidential, legally privileged and/or exempt from disclosure
pursuant to Massachusetts law. It is intended
solely for the addressee. If you received this in error, please
contact the sender and delete the material from any computer.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20070814/a7ec531c/attachment.html>


More information about the postgis-users mailing list