Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL Обединяване на таблици във времето между началото и края

Малко е тромаво, но ето какво измислих:

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

Това връща събития, чиито дати не попадат между нито един от времевите диапазони на който и да е видеоклип, но след това връща видеоклипа, който попада най-близо до тази дата на събитието.

Единственото нещо в момента е, че има някои видеоклипове, в които разликата в секундите е абсолютно същата. Не знам дали искате да върне 2 реда, но засега поставям GROUP BY, за да избера само един.

Кажете ми как работи това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL в Python:UnicodeEncodeError:'ascii'

  2. PDO Подготвен оператор вътре в клас

  3. Вземете последния вмъкнат идентификатор от последния вмъкнат ред

  4. В CentOS7 не може да стартира MySQL

  5. Влияе ли на производителността AWS RDS криптирането с KMS?