Detta MySql-uttryck ger dig tillbaka DATETIME-värden med sekunderna nollställda.
CONVERT(DATE_FORMAT(table.column,'%Y-%m-%d-%H:%i:00'),DATETIME)
Titta på det här. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Så du kan få en fråga som denna:
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...
Men var försiktig. Autogenererade tidsstämplar är ungefär som flyttal; när två av dem dyker upp lika med varandra är det bara tur. Att trunkera dina tidsstämplar till minuten kan vara OK, men du kan också vara bättre att subtrahera en tidsstämpel från en annan och jämföra skillnaderna (eller de absoluta värdena för skillnaderna).
Dessutom kommer denna join att vara långsam eftersom den måste köra den andra trunkeringsfunktionen på varje värde, så den kan inte använda några index.
Du kan subtrahera en tidsstämpel från en annan med TIMESTAMPDIFF()
. Men var försiktig. Denna funktion fungerar bara korrekt på nivån sekunder för tidsstämplar inom några dagar efter varandra; det svämmar över nådlöst (som jag upptäckte med stor smärta).
Du kan prova att avkorta tidsstämplarna till minuter när du infogar dem. Det skulle låta dig indexera dem.