[OPGELOST]
Ik hoop dat een SQL goeroe wat helderheid kan verschaffen. Ik heb van een forum een query opgeduikeld die precies deed wat ik zocht, namelijk een totaal per dag voor de resultaten van een log die om de x-minuten wordt aangevuld vanuit een toepassing.
Alles functioneerde zonder problemen tot het moment er een extra veld werd toegevoegd om onderscheid te maken vanwege meerdere bronnen. Dit is gedaan op basis van een GUID. Sindsdien ontstaat er in de resultaten op een "random" datum een tweede resultaat voor die datum met compleet verkeerde resultaten.
De query
Waar xxx is de UNIX timestamp voor de eerste tijd/datum in het verleden en uid de GUID als tekstveld.Alle overige velden zijn Long Integers.
De resultaten die ik terug krijg (momentopname)
Iemand enig idee waar dit mis kan zitten? Hints, tips en trucs worden zeer gewaardeerd. Het is een hobby project voor een slimme meter en mijn talenten liggen bij programmeren van microcontrollers, niet op het gebied van SQL.
Jeroen
Ik hoop dat een SQL goeroe wat helderheid kan verschaffen. Ik heb van een forum een query opgeduikeld die precies deed wat ik zocht, namelijk een totaal per dag voor de resultaten van een log die om de x-minuten wordt aangevuld vanuit een toepassing.
Alles functioneerde zonder problemen tot het moment er een extra veld werd toegevoegd om onderscheid te maken vanwege meerdere bronnen. Dit is gedaan op basis van een GUID. Sindsdien ontstaat er in de resultaten op een "random" datum een tweede resultaat voor die datum met compleet verkeerde resultaten.
De query
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| SELECT Sub1.diffDate, ((b.pwrConsT1 - a.pwrConsT1) + (b.pwrConsT2 - a.pwrConsT2)) AS pwrDiffCons, ((b.pwrProdT1 - a.pwrProdT1) + (b.pwrProdT2 - a.pwrProdT2)) AS pwrDiffProd, (b.wtrConsT - a.wtrConsT) AS wtrDiffCons, (b.gasConsT - a.gasConsT) AS gasDiffCons FROM ( SELECT DATE_FORMAT(FROM_UNIXTIME(xxx), '%Y-%m-%d') AS diffDate, MIN(xxx) AS MinTimeStamp, MAX(xxx) AS MaxTimeStamp FROM tblP1History WHERE xxx >= 1498725166 AND uid = '11e73ffe-dc32-40de-b2d4-94df20aaf1e5' GROUP BY diffDate ) Sub1 INNER JOIN tblP1History a ON Sub1.MinTimeStamp = a.xxx INNER JOIN tblP1History b ON Sub1.MaxTimeStamp = b.xxx ORDER BY a.xxx DESC; |
Waar xxx is de UNIX timestamp voor de eerste tijd/datum in het verleden en uid de GUID als tekstveld.Alle overige velden zijn Long Integers.
De resultaten die ik terug krijg (momentopname)
De dik gemarkeerde regel geeft totaal onverwachte resulaten. Dat terwijl de regel daarboven wel de juiste resultaten geeft. De datum waarvoor de verkeerde regel wordt weergegeven kan zomaar verspringen als er meer data in de database is geplaatst, soms zijn er ook meerdere regels die een dubbel resultaat geven en soms gaat het gewoon goed. (Date is overigens Sub1.dateDiff)Date=2017-10-06, pwrTotCons=5331, pwrTotProd=320, gasTotCons=770, wtrTotCons=28
Date=2017-10-05, pwrTotCons=8003, pwrTotProd=2672, gasTotCons=1813, wtrTotCons=322
Date=2017-10-04, pwrTotCons=27841, pwrTotProd=729, gasTotCons=1753, wtrTotCons=399
Date=2017-10-04, pwrTotCons=-6244074, pwrTotProd=852738, gasTotCons=-1673198, wtrTotCons=1019108
Date=2017-10-03, pwrTotCons=11576, pwrTotProd=2596, gasTotCons=1689, wtrTotCons=590
Date=2017-10-02, pwrTotCons=20343, pwrTotProd=825, gasTotCons=2055, wtrTotCons=351
Date=2017-10-01, pwrTotCons=11058, pwrTotProd=781, gasTotCons=1167, wtrTotCons=305
Date=2017-09-30, pwrTotCons=11119, pwrTotProd=216, gasTotCons=320, wtrTotCons=175
Date=2017-09-29, pwrTotCons=5109, pwrTotProd=0, gasTotCons=323, wtrTotCons=106
Iemand enig idee waar dit mis kan zitten? Hints, tips en trucs worden zeer gewaardeerd. Het is een hobby project voor een slimme meter en mijn talenten liggen bij programmeren van microcontrollers, niet op het gebied van SQL.
Jeroen
[ Voor 0% gewijzigd door Sleurhutje op 06-10-2017 13:09 . Reden: Aanvulling en typo's ]