Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SQL Tham gia các bảng vào thời gian từ đầu đến cuối

Nó hơi rắc rối, nhưng đây là những gì tôi nghĩ ra:

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

Điều này trả về các sự kiện có ngày không nằm trong khoảng thời gian của bất kỳ video nào, nhưng sau đó trả về video gần nhất với ngày diễn ra sự kiện đó.

Điều duy nhất hiện tại là có một số video có sự chênh lệch số giây hoàn toàn giống nhau. Tôi không biết bạn có muốn nó trả về 2 hàng hay không, nhưng hiện tại, tôi đã đưa vào GROUP BY để chỉ chọn một hàng.

Hãy cho tôi biết cách hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn sản phẩm theo nhiều thuộc tính, sử dụng AND thay thế HOẶC bộ nối, Mô hình dữ liệu EAV

  2. Cách tính toán sự khác biệt giữa hai dấu thời gian trong MySQL

  3. cách nhận kết quả ngược lại từ một truy vấn Laravel

  4. MySQL - kết nối số đã đạt được

  5. Cho phép một trang được bảo vệ bằng mật khẩu được chia sẻ trên phương tiện truyền thông xã hội?