Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perlu array blok tanggal dari Database MySql

Lihatlah diagram di bawah ini yang mewakili beberapa periode waktu yang tumpang tindih

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

Awal atau akhir periode waktu yang berdekatan, ditandai dengan X tidak termasuk dalam periode waktu lain. Jika kita mengidentifikasi waktu-waktu ini, kita dapat membuat beberapa kemajuan.

Kueri ini mengidentifikasi batasan.

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

Hasil kueri ini pada data Anda adalah

boundry    | type
------------------
2011-01-01 | lower
2011-02-20 | upper
2011-03-01 | lower
2011-04-01 | upper

Rentang tanggal yang Anda cari berada di antara batas bawah dan atas berturut-turut yang ditunjukkan di atas. Dengan sedikit pemrosesan pos, ini dapat dengan mudah ditemukan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jadikan mysql_fetch_assoc secara otomatis mendeteksi tipe data yang dikembalikan?

  2. Flutter terhubung ke database di server

  3. Mengubah backend basis data Django dari MySql ke PostgreSQL

  4. Loop rekursif MySql sql

  5. Prosedur Tersimpan MySQL vs. kueri kompleks