Wahrscheinlich wäre es in dem Beispiel besser, ORDER BY id DESC in der query und der LAG function zu nutzen. Das funktioniert aber nur, wenn die Einträge auch in zeitlicher Reihenfolge geschrieben werden. Wäre aber spannend zu wissen.

VG
Sebastian

Am 19.02.22 um 13:59 schrieb Sebastian Weckend:
Hallo Erik,

ich bin kein SQL Experte, aber bei großen Tabellen kann es evtl. schneller sein, wenn du mit den richtigen indices arbeitest. Ich kenne mich mit MariaDB nicht aus, aber da kann man sich sicher auch mit EXPLAIN anschauen, was die query macht und dann optimieren.

Ansonsten einfach die Werte der beiden neuesten Zeilen im PHP subtrahieren, aber das war ja nicht die Frage ;)

VG
Sebastian

Am 19.02.22 um 13:52 schrieb Erik Schanze:
Hallo Sebastian,


vielen Dank für deine schnelle Antwort. Das Kommando funktioniert, aber dauert sehr lange:

MariaDB [siemens]> SELECT TIMESTAMPDIFF(SECOND, created, LEAD(created) OVER (ORDER BY created DESC)) AS diff FROM log1 ORDER BY
created DESC LIMIT 1;
+------+
| diff |
+------+
| -121 |
+------+
1 row in set (1 min 5.042 sec)


Da kann ich die beiden Zeitstempel deutlich schneller in PHP (wo das SQL benutzt wird) subtrahieren.


VG,

Erik


Am 19.02.22 um 13:29 schrieb Sebastian Weckend:
Hallo Erik,

schau dir mal die window functions [0], besonders LEAD [1] und LAG [2] an.

Wenn der Datentyp von created TIMESTAMP ist und du nur den Unterschied der beiden neuesten Zeilen in der DB möchtest, dann so was ähnliches wie (ungetestet):

SELECT
    TIMESTAMPDIFF(SECOND, created, LEAD(created) OVER (ORDER BY created DESC)) AS diff
FROM table
ORDER BY created DESC
LIMIT 1;

Viele Grüße
Sebastian

[0] https://mariadb.com/kb/en/window-functions/
[1] https://mariadb.com/kb/en/lead/
[2] https://mariadb.com/kb/en/lag/

Am 19.02.22 um 12:14 schrieb Erik Schanze:
Liebe Linux-User,


ich habe eine MariaDB auf Debian 11 laufen und möchte die Zeitdifferenz
in Sekunden zwischen der letzten und der vorletzten Zeile in einer
Tabelle haben, anhand des "created"-Wertes. Die Beispiele im Internet
ufern irgendwie immer gleich derart aus, dass ich sie nicht mehr
verstehe. Ich habe nur rudimentäres SQL-Wissen. :-)

Gibt es da kein einfache Abfrage, die ich nur nicht gefunden habe?


Ich freue mich auf eure Antworten.


VG,

Erik





Antwort per Email an