Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL wählt DATETIME ähnlich minutengenau aus

Dieser MySql-Ausdruck gibt Ihnen DATETIME-Werte mit auf Null gesetzten Sekunden zurück.

CONVERT(DATE_FORMAT(table.column,'%Y-%m-%d-%H:%i:00'),DATETIME)

Schau dir das an. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Sie könnten also mit einer Abfrage wie dieser enden:

SELECT Table1.TimeSTamp1, Table1.Param1, Table2.TimeStamp2, Table2.Param2 
    FROM Table1
    JOIN Table2 ON  CONVERT(DATE_FORMAT(Table1.TimeStamp1,'%Y-%m-%d-%H:%i:00'),DATETIME)
                 =  CONVERT(DATE_FORMAT(Table2.TimeStamp2,'%Y-%m-%d-%H:%i:00'),DATETIME)
    WHERE ... conditions for the other parameters of Table1 and Table2... 

Aber sei vorsichtig. Automatisch generierte Zeitstempel sind so etwas wie Fließkommazahlen; Wenn zwei gleich auftauchen, ist es einfach Glück. Es kann in Ordnung sein, Ihre Zeitstempel auf die Minute zu kürzen, aber Sie können auch besser dran sein, einen Zeitstempel von einem anderen zu subtrahieren und die Unterschiede (oder die absoluten Werte der Unterschiede) zu vergleichen.

Außerdem wird dieser Join langsam sein, da er die Second-Trunking-Funktion für jeden Wert ausführen muss, sodass er keine Indizes verwenden kann.

Sie können einen Zeitstempel von einem anderen subtrahieren mit TIMESTAMPDIFF() . Aber sei vorsichtig. Diese Funktion funktioniert nur auf Sekundenebene korrekt für Zeitstempel innerhalb weniger Tage; es läuft gnadenlos über (wie ich mit großem Schmerz feststellte).

Sie könnten versuchen, die Zeitstempel beim Einfügen auf Minuten zu kürzen. Damit könnten Sie sie indizieren.