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

SQL Sammenføj tabeller om tid mellem start og slut

Det er lidt klodset, men her er, hvad jeg fandt på:

SELECT * FROM ( SELECT a.ID AS EventID, b.ID AS VideoID, b.Filename, ( CASE WHEN a.Time < b.StartTime THEN UNIX_TIMESTAMP(b.StartTime) - UNIX_TIMESTAMP(a.Time) WHEN a.Time > b.EndTime THEN UNIX_TIMESTAMP(a.Time) - UNIX_TIMESTAMP(b.EndTime) END ) AS distance_factor FROM `Events` a CROSS JOIN video b WHERE NOT EXISTS ( SELECT NULL FROM Video WHERE a.Time BETWEEN StartTime AND EndTime ) ) c WHERE c.distance_factor = ( SELECT MIN(CASE WHEN d.Time < e.StartTime THEN UNIX_TIMESTAMP(e.StartTime) - UNIX_TIMESTAMP(d.Time) WHEN d.Time > e.EndTime THEN UNIX_TIMESTAMP(d.Time) - UNIX_TIMESTAMP(e.EndTime) END) FROM `Events` d CROSS JOIN video e WHERE d.ID = c.EventID ) GROUP BY c.EventID

Dette returnerer begivenheder, hvis datoer ikke falder mellem nogen af ​​tidsintervallerne for nogen video, men returnerer derefter den video, der falder tættest på begivenhedsdatoen.

Det eneste lige nu er, at der er nogle videoer, hvor sekundforskellen er nøjagtig den samme. Jeg ved ikke, om du vil have, at den skal returnere 2 rækker, men indtil videre sætter jeg i GROUP BY for bare at vælge en.

Fortæl mig, hvordan det virker.



  1. hvordan man bruger kanoniske funktioner i Entity Framework og Mysql

  2. tilføjelse af en slags automatisk stigningskolonne til en mysql-tabel

  3. Betyder kolonnerækkefølgen noget i dine MySQL-tabeller?

  4. sqlLiteDatabase.query() for INNER JOIN