sql >> Base de Datos >  >> RDS >> Mysql

MySQL seleccione DATETIME similar al minuto

Esta expresión de MySql le devolverá los valores DATETIME con los segundos en cero.

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

Mira esto. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Así que podría terminar con una consulta como esta:

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... 

Pero ten cuidado. Las marcas de tiempo generadas automáticamente son como números de coma flotante; cuando dos de ellos resultan iguales entre sí, es solo suerte. Truncar sus marcas de tiempo al minuto puede estar bien, pero también puede ser mejor restar una marca de tiempo de otra y comparar las diferencias (o los valores absolutos de las diferencias).

Además, esta combinación será lenta porque tiene que ejecutar la función de segundo truncamiento en cada valor, por lo que no puede usar ningún índice.

Puede restar una marca de tiempo de otra con TIMESTAMPDIFF() . Pero ten cuidado. Esta función solo funciona correctamente a nivel de segundos para las marcas de tiempo con pocos días de diferencia; se desborda sin gracia (como descubrí con gran dolor).

Puede intentar truncar las marcas de tiempo a minutos en el momento en que las inserta. Eso te permitiría indexarlos.