SELECT v.datum, ROUND((v.temp + 0.8 * g.temp + 4 * eg.temp + 2 * eeg.temp) / 2.4,1) AS uitkomst FROM ( SELECT datum, (MAX(t_s/10 + MIN(t_s)/10) / 2 AS temp FROM tbl_av GROUP BY datum ) AS v JOIN ( SELECT datum, (MAX(t_s)/10 + MIN(t_s)/10) / 2 AS temp FROM tbl_av GROUP BY datum ) AS g on g.datum = (v.datum - INTERVAL 1 DAY) JOIN ( SELECT datum, (MAX(t_s)/10 + MIN(t_s)/10) / 2 AS temp FROM tbl_av GROUP BY datum ) AS eg on eg.datum = (v.datum - INTERVAL 2 DAY) JOIN ( SELECT datum, (MAX(t_s)/10 + MIN(t_s)/10) / 2 AS temp FROM tbl_av GROUP BY datum ) AS eeg on eeg.datum = (v.datum - INTERVAL 3 DAY) WHERE v.datum BETWEEN 19970101 AND 19980101;
now the problem lies in the fact that it takes a long time ot execute (in this example its only between 1997-01-01 AND 1998-01-01) but it can be for more years. Now i think the solution to improving this is to add a WHERE clause so it doesnt get ALL the table data all the time but just the one i need so i tried doing this:
SELECT v.datum, ROUND((v.temp + 0.8 * g.temp + 4 * eg.temp + 2 * eeg.temp) / 2.4,1) AS uitkomst FROM ( SELECT datum, (MAX(t_s/10 + MIN(t_s)/10) / 2 AS temp FROM tbl_av GROUP BY datum ) AS v JOIN ( SELECT datum, (MAX(t_s)/10 + MIN(t_s)/10) / 2 AS temp WHERE datum = (v.datum - INTERVAL 1 DAY) FROM tbl_av GROUP BY datum ) AS g on g.datum = (v.datum - INTERVAL 1 DAY) JOIN ( SELECT datum, (MAX(t_s)/10 + MIN(t_s)/10) / 2 AS temp WHERE datum = (v.datum - INTERVAL 2 DAY) FROM tbl_av GROUP BY datum ) AS eg on eg.datum = (v.datum - INTERVAL 2 DAY) JOIN ( SELECT datum, (MAX(t_s)/10 + MIN(t_s)/10) / 2 AS temp WHERE datum = (v.datum - INTERVAL 3 DAY) FROM tbl_av GROUP BY datum ) AS eeg on eeg.datum = (v.datum - INTERVAL 3 DAY) WHERE v.datum BETWEEN 19970101 AND 19980101
However in the WHERE clause it cant find the column v.datum (datum = date btw.. its just that its in dutch :P).
So now my question is there anyone that can help me improve the query in terms of performance? Thx in advance.


Sign In
Create Account


Back to top









