sql >> Database >  >> RDS >> Mysql

Vind overlappende (datum/tijd) rijen binnen één tabel

SELECT  m1.meetingID, m1.meetingStart, m1.meetingEnd, m2.meetingID
FROM    t_meeting m1, t_meeting m2
WHERE   (m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
        OR m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd)
        AND m1.meetingID <> m2.meetingID

Hierdoor wordt elk paar twee keer geselecteerd.

Als u wilt dat elk paar slechts één keer wordt geselecteerd, gebruikt u:

SELECT  m1.meetingID, m1.meetingStart, m1.meetingEnd, m2.meetingID
FROM    t_meeting m1, t_meeting m2
WHERE   (m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
        OR m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd)
        AND m2.meetingID > m1.meetingID

Zorg ervoor dat je indexen hebt op meetingStart en meetingEnd om de zoekopdracht efficiënt te laten werken.

MySQL , zal echter waarschijnlijk INDEX MERGE . gebruiken om deze query uit te voeren, wat niet erg efficiënt is in de huidige implementatie.

U kunt ook proberen het volgende te gebruiken:

SELECT  m1.*, m2.*
FROM    (
        SELECT  m1.meetingID AS mid1, m2.meetingID AS mid2
        FROM    t_meeting m1, t_meeting m2
        WHERE   m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
                AND m2.meetingID <> m1.meetingID
        UNION
        SELECT  m1.meetingID, m2.meetingID
        FROM    t_meeting m1, t_meeting m2
        WHERE   m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd
                AND m2.meetingID <> m1.meetingID
        ) mo, t_meeting m1, t_meeting m2
WHERE   m1.meetingID = mid1
        AND m2.meetingID = mid2

, wat ingewikkelder is, maar waarschijnlijk iets sneller zal werken.



  1. Het resultaat van een uitdrukking (bijv. Functie-aanroep) gebruiken in een lijst met opgeslagen procedureparameters?

  2. Hoe cijfers aan het einde van de tekenreeks te verwijderen met behulp van SQL

  3. 4 manieren om een ​​getal om te zetten naar een percentage in SQL Server (T-SQL)

  4. UTF-8-tekens detecteren in een Latin1-gecodeerde kolom - MySQL