Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL seleziona DATETIME simile fino al minuto

Questa espressione MySql ti restituirà i valori DATETIME con i secondi azzerati.

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

Guarda questo. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Quindi potresti finire con una query come questa:

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

Ma fa attenzione. I timestamp generati automaticamente sono un po' come i numeri in virgola mobile; quando due di loro risultano uguali tra loro è solo fortuna. Troncare i tuoi timestamp al minuto può andare bene, ma potresti anche essere meglio sottrarre un timestamp da un altro e confrontare le differenze (o i valori assoluti delle differenze).

Inoltre, questo join sarà lento perché deve eseguire la funzione di troncamento del secondo su ogni valore, quindi non può utilizzare alcun indice.

Puoi sottrarre un timestamp da un altro con TIMESTAMPDIFF() . Ma fa attenzione. Questa funzione funziona correttamente solo a livello di secondi per timestamp entro pochi giorni l'uno dall'altro; trabocca senza grazia (come ho scoperto con grande dolore).

Potresti provare a troncare i timestamp a minuti nel momento in cui li inserisci. Ciò ti permetterebbe di indicizzarli.