PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Usuwanie częściowo/całkowicie nakładających się zdarzeń z sygnaturami czasowymi rozpoczęcia i zakończenia w wielu wartościach

Warunek dołączenia:

  • Spróbuj znaleźć inne wydarzenie z tą samą salą
  • Ale musisz mieć inny identyfikator niż ty
  • Daty muszą się pokrywać Określ, czy dwa zakresy dat pokrywają się
  • Wreszcie musi mieć późniejszą datę utworzenia.

Jeśli nie możesz znaleźć żadnego innego wiersza, oznacza to, że jesteś sam, ponieważ nie nakładają się one na siebie lub masz ostatnią datę.

Demo SQL

SELECT a.*
FROM "events" a
LEFT JOIN "events" b
  ON a.room = b.room 
 AND a.id <> b.id
 AND a."start" <= b."end"
 AND a."end"   >= b."start"
 AND a.created_at < b.created_at
WHERE b.id IS NULL;

WYJŚCIE

| id |                start |                  end |                  created_at |  room |
|----|----------------------|----------------------|-----------------------------|-------|
|  2 | 2019-01-23T18:30:00Z | 2019-01-23T19:00:00Z | 2019-01-23T01:04:05.861876Z | Room1 |
|  7 | 2019-01-23T20:15:00Z | 2019-01-23T20:45:00Z |  2019-01-20T20:20:20.20202Z | Room1 |
|  9 | 2019-01-23T18:30:00Z | 2019-01-23T19:00:00Z | 2019-01-23T01:04:05.861877Z | Room2 |
| 14 | 2019-01-23T20:15:00Z | 2019-01-23T20:45:00Z |  2019-01-20T20:20:20.20202Z | Room2 |
| 16 | 2019-01-23T20:15:00Z | 2019-01-23T20:45:00Z | 2019-01-20T20:20:20.202021Z | Room3 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy pole istnieje w kolumnie typu json PostgreSQL

  2. Sprawdzanie istnienia indeksu w PostgreSQL

  3. Obsługa stronicowania ze zmieniającymi się porządkami sortowania

  4. Jak zadeklarować zmienną w PostgreSQL

  5. PHP nie może połączyć się z PostgreSQL na CentOS 7