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

Cần một mảng khối ngày tháng từ Cơ sở dữ liệu MySql

Nhìn vào biểu đồ bên dưới biểu thị một số khoảng thời gian trùng lặp

X----|              |--------|         |------X
    |-------X      X------------X
                         |----|     X----|

Đầu hoặc cuối của bất kỳ khoảng thời gian liền kề nào, được đánh dấu bằng X không nằm trong bất kỳ khoảng thời gian nào khác. Nếu xác định được những thời điểm này, chúng ta có thể đạt được một số tiến bộ.

Truy vấn này xác định các ranh giới.

SELECT boundary FROM
(

-- find all the lower bounds
    SELECT d1.StartDate AS boundary, 'lower' as type
    FROM dates d1
    LEFT JOIN dates d2 ON ( 
        d1.StartDate > d2.StartDate
        AND 
        d1.StartDate < d2.EndDate
    )
    WHERE d2.RowId IS NULL
    GROUP BY d1.StartDate

UNION

-- find all the upper bounds
    SELECT d1.EndDate AS boundary, 'upper' as type
    FROM dates d1
    LEFT JOIN dates d2 ON ( 
        d1.EndDate > d2.StartDate
        AND 
        d1.EndDate < d2.EndDate 
    )
    WHERE d2.RowId IS NULL
    GROUP BY d1.StartDate
) as boundaries

ORDER BY boundary ASC

Kết quả của truy vấn này trên dữ liệu của bạn là

Giới hạn
boundry    | type
------------------
2011-01-01 | lower
2011-02-20 | upper
2011-03-01 | lower
2011-04-01 | upper

Phạm vi ngày bạn đang theo đuổi nằm giữa giới hạn dưới và giới hạn trên liên tiếp được hiển thị tiếp theo. Với một chút xử lý bài đăng, bạn có thể dễ dàng tìm thấy chú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. MySql nhận số lượng từng loại phần tử trong cloumn

  2. Làm cách nào để thực hiện một truy vấn đã kết hợp trong giao diện bảng ZF?

  3. Chèn tệp vào mysql Blob

  4. Cài đặt MySQL Workbench để quản trị cơ sở dữ liệu

  5. UTF-8 so với mysql Latin1, các chỉ mục không được sử dụng trên utf-8