--
--


--
-- Name: bugtest; Type: SCHEMA; Schema: -; Owner: -
--

CREATE SCHEMA bugtest;


--
-- Name: nuts; Type: SCHEMA; Schema: -; Owner: -
--

CREATE SCHEMA nuts;





--
-- Name: gasmeter; Type: TABLE; Schema: nuts; Owner: -; Tablespace: 
--

CREATE TABLE gasmeter (
    tijd timestamp(0) without time zone DEFAULT (now())::timestamp(0) without time zone NOT NULL,
    stand numeric(9,3) NOT NULL
);



--
-- Name: gasmeter; Type: VIEW; Schema: bugtest; Owner: -
--

CREATE VIEW gasmeter AS
    WITH gegevens AS (SELECT gasmeter.tijd, gasmeter.stand, lag(gasmeter.tijd) OVER tijdwindow AS prev_tijd, lag(gasmeter.stand) OVER tijdwindow AS prev_stand FROM nuts.gasmeter WINDOW tijdwindow AS (ORDER BY gasmeter.tijd)) SELECT gegevens.tijd, gegevens.stand, gegevens.prev_tijd, gegevens.prev_stand, (gegevens.tijd - gegevens.prev_tijd) AS delta_tijd, (gegevens.stand - gegevens.prev_stand) AS delta_stand FROM gegevens;


--
-- Name: temperatuur_raw; Type: TABLE; Schema: bugtest; Owner: -; Tablespace: 
--

CREATE TABLE temperatuur_raw (
    stn smallint NOT NULL,
    datum date NOT NULL,
    tg smallint NOT NULL,
    tn smallint NOT NULL,
    tx smallint NOT NULL
);


--
-- Name: TABLE temperatuur_raw; Type: COMMENT; Schema: bugtest; Owner: -
--

COMMENT ON TABLE temperatuur_raw IS 'DEZE GEGEVENS MOGEN VRIJ WORDEN GEBRUIKT MITS DE VOLGENDE BRONVERMELDING WORDT GEGEVEN:
KONINKLIJK NEDERLANDS METEOROLOGISCH INSTITUUT (KNMI)
STN             LON           LAT         ALT  NAME
280:   6.586      53.125    3.50  EELDE
YYYYMMDD = Datum (YYYY=jaar MM=maand DD=dag); 
TG       = Etmaalgemiddelde temperatuur (in 0.1 graden Celsius); 
TN       = Minimum temperatuur (in 0.1 graden Celsius); 
TX       = Maximum temperatuur (in 0.1 graden Celsius); 
STN,YYYYMMDD,   TG,   TN,   TX
';


--
-- Name: temperatuur; Type: VIEW; Schema: bugtest; Owner: -
--

CREATE VIEW temperatuur AS
    SELECT temperatuur_raw.stn, temperatuur_raw.datum AS dag, (((GREATEST(0, (180 - temperatuur_raw.tg)))::numeric / 10.0))::numeric(3,1) AS graaddagen, (((temperatuur_raw.tg)::numeric / 10.0))::numeric(3,1) AS temperatuur_gemiddeld, (((temperatuur_raw.tn)::numeric / 10.0))::numeric(3,1) AS temperatuur_minimum, (((temperatuur_raw.tx)::numeric / 10.0))::numeric(3,1) AS temperatuur_maximum FROM temperatuur_raw;


--
-- Name: gasverbruik; Type: VIEW; Schema: bugtest; Owner: -
--

CREATE VIEW gasverbruik AS
    WITH RECURSIVE minmax(min, max) AS (SELECT (min(gasmeter.tijd))::date AS min, (max(gasmeter.tijd))::date AS max FROM nuts.gasmeter), dagen(dag) AS (SELECT minmax.min FROM minmax UNION ALL SELECT ((dagen.dag + '1 day'::interval))::date AS date FROM (dagen CROSS JOIN minmax) WHERE (dagen.dag < minmax.max)), dagstand(dag, stand) AS (SELECT dagen.dag, ((gasmeter.prev_stand)::double precision + (((gasmeter.delta_stand)::double precision * date_part('epoch'::text, ((dagen.dag)::timestamp without time zone - gasmeter.prev_tijd))) / date_part('epoch'::text, (gasmeter.tijd - gasmeter.prev_tijd)))) FROM (dagen LEFT JOIN gasmeter ON (((dagen.dag >= gasmeter.prev_tijd) AND (dagen.dag < gasmeter.tijd))))), verbruik AS (SELECT dagstand.dag, (dagstand.stand)::numeric(9,3) AS stand, ((lead(dagstand.stand) OVER (ORDER BY dagstand.dag) - dagstand.stand))::numeric(9,3) AS verbruik, temperatuur.graaddagen FROM (dagstand LEFT JOIN temperatuur USING (dag))) SELECT verbruik.dag, verbruik.stand, verbruik.verbruik, verbruik.graaddagen FROM verbruik;


--
-- Name: gasverbruik_maand; Type: VIEW; Schema: bugtest; Owner: -
--

CREATE VIEW gasverbruik_maand AS
    WITH RECURSIVE minmax(min, max) AS (SELECT (min(date_trunc('month'::text, gasmeter.tijd)))::date AS min, (max(date_trunc('month'::text, gasmeter.tijd)))::date AS max FROM nuts.gasmeter), maanden(maand) AS (SELECT minmax.min FROM minmax UNION ALL SELECT ((maanden.maand + '1 mon'::interval))::date AS date FROM (maanden CROSS JOIN minmax) WHERE (maanden.maand < minmax.max)), maandstand(maand, stand) AS (SELECT maanden.maand, ((gasmeter.prev_stand)::double precision + (((gasmeter.delta_stand)::double precision * date_part('epoch'::text, ((maanden.maand)::timestamp without time zone - gasmeter.prev_tijd))) / date_part('epoch'::text, (gasmeter.tijd - gasmeter.prev_tijd)))) FROM (maanden LEFT JOIN gasmeter ON (((maanden.maand >= gasmeter.prev_tijd) AND (maanden.maand < gasmeter.tijd))))), graadmaanden(maand, graaddagen) AS (SELECT date_trunc('month'::text, (temperatuur.dag)::timestamp with time zone) AS date_trunc, sum(temperatuur.graaddagen) AS sum FROM temperatuur GROUP BY date_trunc('month'::text, (temperatuur.dag)::timestamp with time zone)), verbruik AS (SELECT maand, (maandstand.stand)::numeric(9,3) AS stand, (lead(maandstand.stand) OVER (ORDER BY maand) - maandstand.stand) AS verbruik, graadmaanden.graaddagen FROM (maandstand LEFT JOIN graadmaanden USING (maand))) SELECT (verbruik.maand)::date AS maand, verbruik.stand, (verbruik.verbruik)::numeric(9,3) AS verbruik, ((verbruik.verbruik / ((((verbruik.maand + '1 mon'::interval))::date - (verbruik.maand)::date))::double precision))::numeric(9,3) AS dagverbruik, verbruik.graaddagen FROM verbruik;


--
-- Name: gasverbruik_week; Type: VIEW; Schema: bugtest; Owner: -
--

CREATE VIEW gasverbruik_week AS
    WITH RECURSIVE minmax(min, max) AS (SELECT (min(date_trunc('week'::text, gasmeter.tijd)))::date AS min, (max(date_trunc('week'::text, gasmeter.tijd)))::date AS max FROM nuts.gasmeter), weeken(week) AS (SELECT minmax.min FROM minmax UNION ALL SELECT ((weeken.week + '7 days'::interval))::date AS date FROM (weeken CROSS JOIN minmax) WHERE (weeken.week < minmax.max)), weekstand(week, stand) AS (SELECT weeken.week, ((gasmeter.prev_stand)::double precision + (((gasmeter.delta_stand)::double precision * date_part('epoch'::text, ((weeken.week)::timestamp without time zone - gasmeter.prev_tijd))) / date_part('epoch'::text, (gasmeter.tijd - gasmeter.prev_tijd)))) FROM (weeken LEFT JOIN gasmeter ON (((weeken.week >= gasmeter.prev_tijd) AND (weeken.week < gasmeter.tijd))))), graadweken(week, graaddagen) AS (SELECT date_trunc('week'::text, (temperatuur.dag)::timestamp with time zone) AS date_trunc, sum(temperatuur.graaddagen) AS sum FROM temperatuur GROUP BY date_trunc('week'::text, (temperatuur.dag)::timestamp with time zone)), verbruik AS (SELECT week, (weekstand.stand)::numeric(9,3) AS stand, (lead(weekstand.stand) OVER (ORDER BY week) - weekstand.stand) AS verbruik, graadweken.graaddagen FROM (weekstand LEFT JOIN graadweken USING (week))) SELECT (to_char(verbruik.week, 'IYYYIW'::text))::integer AS week, verbruik.stand, (verbruik.verbruik)::numeric(9,3) AS verbruik, ((verbruik.verbruik / (7)::double precision))::numeric(9,3) AS dagverbruik, verbruik.graaddagen FROM verbruik;


--
-- Data for Name: temperatuur_raw; Type: TABLE DATA; Schema: bugtest; Owner: -
--

COPY temperatuur_raw (stn, datum, tg, tn, tx) FROM stdin;
\.



--
-- Data for Name: gasmeter; Type: TABLE DATA; Schema: nuts; Owner: -
--

COPY gasmeter (tijd, stand) FROM stdin;
2011-01-03 07:05:00	31070.680
2011-01-17 00:04:53	31140.845
2011-01-30 22:49:30	31224.118
2011-02-11 00:08:09	31298.888
2011-02-28 09:57:34	31465.297
2011-03-24 03:27:31	31625.299
2011-04-08 07:25:29	31633.121
2011-04-25 22:32:28	31646.208
2011-04-26 21:26:30	31646.573
2011-04-28 17:50:24	31647.257
2011-09-16 12:29:42	31696.279
2011-11-22 09:05:00	31758.485
2012-02-18 08:03:45	32329.251
2012-02-23 07:04:00	32355.854
2013-01-02 08:50:05	33142.100
\.



--
-- Name: temperatuur_raw_pkey; Type: CONSTRAINT; Schema: bugtest; Owner: -; Tablespace: 
--

ALTER TABLE ONLY temperatuur_raw
    ADD CONSTRAINT temperatuur_raw_pkey PRIMARY KEY (stn, datum);



--
-- Name: gasmeter_t_pkey; Type: CONSTRAINT; Schema: nuts; Owner: -; Tablespace: 
--

ALTER TABLE ONLY gasmeter
    ADD CONSTRAINT gasmeter_t_pkey PRIMARY KEY (tijd);



--
-- Name: gasmeter_insert; Type: RULE; Schema: bugtest; Owner: -
--

CREATE RULE gasmeter_insert AS ON INSERT TO gasmeter DO INSTEAD INSERT INTO nuts.gasmeter (tijd, stand) VALUES (CASE WHEN (new.tijd IS NULL) THEN (now())::timestamp(0) without time zone ELSE new.tijd END, new.stand);


--
--

