Na een hoop gezoek (hier en op Stackoverflow) en gefröbel is het me gelukt een werkende query met running totals te maken. De basis is een database met tellerstanden die regel voor regel afgevraagd worden. Het verschil is de opbrengst per 5 minuten en het maximumvermogen. De running total geeft de dagopbrengst. De tabel heet logger, de meetwaarden S0_1 enz. en Datum_Dag is een datetime waarde, die elke vijf minuten 1x voorkomt.
Met de functie EXPLAIN ben ik erachter waarom deze query zo traag is, eerst worden alle 440.000 records gelezen en pas op de output wordt het Datum-filter gebruikt. Dat moet natuurlijk aan de inputkant gebeuren, alleen lukt dat me niet om dat werkend te krijgen. Ik dacht iets gevonden te hebben met http://stackoverflow.com/...4418/mysql-subquery-limit
maar ik krijg deze constructie niet werkend in mijn query. Ik zie door de haakjes het bos niet meer en zou graag een tip of oplossingsrichting krijgen. Onderstaand mijn (voor leesbaarheid iets vereenvoudigde) query.
En een stukje van de database:
Met de functie EXPLAIN ben ik erachter waarom deze query zo traag is, eerst worden alle 440.000 records gelezen en pas op de output wordt het Datum-filter gebruikt. Dat moet natuurlijk aan de inputkant gebeuren, alleen lukt dat me niet om dat werkend te krijgen. Ik dacht iets gevonden te hebben met http://stackoverflow.com/...4418/mysql-subquery-limit
code:
1
2
3
4
5
6
7
8
9
| DELETE FROM posts WHERE id not in ( SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp desc limit 0, 15 ) as t); |
maar ik krijg deze constructie niet werkend in mijn query. Ik zie door de haakjes het bos niet meer en zou graag een tip of oplossingsrichting krijgen. Onderstaand mijn (voor leesbaarheid iets vereenvoudigde) query.
code:
1
2
3
4
5
6
7
8
9
10
| select t1.Datum_Dag as Date1, (t2.S0_1 - t1.S0_1) as `101`, (t2.S0_1 - t1.S0_1) as `201` , @running_total1 := 12 as `301`, (t2.S0_2 - t1.S0_2) as `102`, (t2.S0_2 - t1.S0_2) as `202` , @running_total2 := 13 as `302`, (t2.S0_3 - t1.S0_3) as `103`, (t2.S0_3 - t1.S0_3) as `203` , @running_total3 := 14 as `303`, @prev_day <> DATE(t1.Datum_Dag) , @prev_day := DATE(t1.Datum_Dag) , @prev_day := DATE(t1.Datum_Dag) from (select @rownumt1:=@rownumt1+1 samplenr, Datum_Dag, S0_1, S0_2, S0_3, T_1 from logger, (select @rownumt1:=0) dummy1 order by Datum_Dag)t1, (select @rownumt2:=@rownumt2+1 samplenr, Datum_Dag, S0_1, S0_2, S0_3, T_1 from logger, (select @rownumt2:=0) dummy2 order by Datum_Dag)t2 cross JOIN (SELECT @prev_day:=-1 , @running_total1 := 0, @running_total2 := 0, @running_total3 := 0 ) r Where t2.samplenr = t1.samplenr +1 and t2.S0_1 - t1.S0_1 !=0 and Datum_Dag Between '2017-04-16 00:05:00' AND '2017-04-21 23:55:00' ORDER BY `Date1` |
En een stukje van de database:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| `logger` (`Datum_Dag`, `S0_1`, `S0_2`, `S0_3`, `S0_4`, `S0_5`, `S0_6`, `S0_7`, `S0_8`, `S0_9`, `T_1`) ('2017-04-24 13:05:00', '8843.759', '8707.556', '1057.483', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.193', '128'), ('2017-04-24 13:10:00', '8843.777', '8707.573', '1057.486', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.327', '133'), ('2017-04-24 13:15:00', '8843.796', '8707.590', '1057.490', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.399', '125'), ('2017-04-24 13:20:00', '8843.816', '8707.609', '1057.494', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.471', '124'), ('2017-04-24 13:25:00', '8843.837', '8707.629', '1057.499', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.541', '128'), ('2017-04-24 13:30:00', '8843.850', '8707.641', '1057.502', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.619', '127'), ('2017-04-24 13:35:00', '8843.864', '8707.654', '1057.505', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.697', '130'), ('2017-04-24 13:40:00', '8843.875', '8707.665', '1057.507', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.777', '129'), ('2017-04-24 13:45:00', '8843.884', '8707.672', '1057.509', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.860', '129'), ('2017-04-24 13:50:00', '8843.894', '8707.682', '1057.511', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1831.941', '127'), ('2017-04-24 13:55:00', '8843.908', '8707.695', '1057.514', '41.122', '542.702', '9313.000', '1544.879', '1537.714', '1832.018', '133'), |
A'dam PVOutput