<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Nur Text Zchn";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.NurTextZchn
        {mso-style-name:"Nur Text Zchn";
        mso-style-priority:99;
        mso-style-link:"Nur Text";
        font-family:"Calibri","sans-serif";}
span.E-MailFormatvorlage20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.E-MailFormatvorlage21
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>Hallo Christian,<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>ich hatte erst an negative Werte gedacht und keine um den „Ausstiegszeitpunkt“ gefunden. Das scheidet aber auch aus, da sich die Werte im Zähler befinden und somit keine Division durch Null hervorrufen können.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Was mich irritiert ist das nach Löschen der aggregierten Daten deren Neuerstellung fehlerfrei durchläuft.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Kann jemand aus der Fehlermeldung erkennen um welchen Kanal (Channel_ID) es gehen könnte?<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Grüße<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Micha<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";mso-fareast-language:DE'>Von:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";mso-fareast-language:DE'> volkszaehler-users [mailto:volkszaehler-users-bounces@demo.volkszaehler.org] <b>Im Auftrag von </b>Christian Lange<br><b>Gesendet:</b> Montag, 20. März 2023 11:29<br><b>An:</b> volkszaehler-users@demo.volkszaehler.org<br><b>Betreff:</b> Re: [vz-users] Aggregation (minute) schlägt fehl<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p>Hi Micha, <o:p></o:p></p><p>ich hab leider keine Ahnung, wie die Datenbank aussieht (ich nutze selbst eine andere), aber der Fehler sagt aus, dass eine Division durch 0 vorliegt. <o:p></o:p></p><p>Die einzige Zeile in der SQL Query, die mir da ins Auge sticht ist diese hier:<o:p></o:p></p><p>> COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - MIN(agg.prev_timestamp)), <o:p></o:p></p><p>Das Maximum des Timestamps minus dem Minimum des vorherigen Timestamps aus der (on the fly) erzeugten "agg" Tabelle sind zusammen 0. Daher klappt die Division und damit die SQL Query nicht. Die Daten stammen (soweit ich das sehen kann) aus der "data" Tabelle. Vielleicht fällt dir ja da etwas auf in den Daten bei den Timestamps. Den Rest überlasse ich den Experten, die das Tool so im Einsatz haben ;)<o:p></o:p></p><p>Viel Erfolg,<br>Christian <o:p></o:p></p><p><o:p> </o:p></p><p><o:p> </o:p></p><div><p class=MsoNormal>Am 20.03.2023 um 10:37 schrieb Michael Hartmann:<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal>Hallo,<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>ich hole das hier noch einmal vor, da es ziemliche nervt.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><div style='border:none;border-bottom:solid windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm'><p class=MsoNormal>Via cronjob lasse ich alle 10min eine Aggregation auf die Minute laufen. Bereits vor einigen Wochen ist diese dann plötzlich mit der folgenden Fehlermeldung ausgestiegen:<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p></div><p class=MsoPlainText><span lang=EN-US>In AbstractMySQLDriver.php line 128:</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  An exception occurred while executing 'REPLACE INTO aggregate (channel_id,</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  type, timestamp, value, count) SELECT channel_id, ? AS type, MAX(agg.timest</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  amp) AS timestamp, COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - M</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  IN(agg.prev_timestamp)), AVG(agg.value)) AS value, COUNT(agg.value) AS coun</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  t FROM ( SELECT channel_id, timestamp, value, value * (timestamp - @prev_ti</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  mestamp) AS val_by_time, COALESCE(@prev_timestamp, 0) AS prev_timestamp, @p</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  rev_timestamp := timestamp FROM data CROSS JOIN (SELECT @prev_timestamp :=</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d %H:%</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND aggreg</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  ate.channel_id = ?) AS vars WHERE channel_id = ? AND timestamp >= IFNULL((S</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  ELECT UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  d %H:%i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  aggregate.channel_id = ? ), 0) AND timestamp < UNIX_TIMESTAMP(DATE_FORMAT(N</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  OW(), "%Y-%m-%d %H:%i:00")) * 1000 ) AS agg GROUP BY channel_id, YEAR(FROM_</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)), HOUR(F</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  ROM_UNIXTIME(timestamp/1000)), MINUTE(FROM_UNIXTIME(timestamp/1000))' with</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  params [1, 1, "3", "3", 1, "3"]:</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  SQLSTATE[22012]: Division by zero: 1365 Division by 0</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>In Exception.php line 18:</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>  SQLSTATE[22012]: Division by zero: 1365 Division by 0</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US>In PDOStatement.php line 117:</span><o:p></o:p></p><p class=MsoPlainText><span lang=EN-US> </span><o:p></o:p></p><div style='border:none;border-bottom:solid windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm'><p class=MsoPlainText><span lang=EN-US>  SQLSTATE[22012]: Division by zero: 1365 Division by 0</span><o:p></o:p></p></div><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal>Die Aggregation auf Stunde und Tag bereitet (bisher) keine Probleme.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Beim letzten Mal hatte ich die Aggregationstabelle gelöscht und neu aufgebaut. Nach einigen Wochen kommt der Fehler nun wieder.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Kann mir jemand erklären wo das Problem liegt? Die Fehlermeldung kann ich nicht interpretieren.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Viele Grüße<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Micha<o:p></o:p></p></blockquote></div></body></html>