Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdź luki dat za pomocą mysql

To powinno dać poprawny wynik:

select
  id,
  min(startDate) as startFreeDate,
  count(*) - (endDate is null) numFreeDays
from (
  select
    pb1.id,
    pb1.bookingDate startDate,
    min(pb2.bookingDate) endDate
  from
    pricesBookings pb1 left join pricesBookings pb2
    on pb1.id=pb2.id
       and pb2.price>0
       and pb2.bookingDate>pb1.bookingDate
  where
    pb1.price=0
  group by
    pb1.id,
    pb1.bookingDate
) s
group by id, endDate
order by id, startDate

zobacz go tutaj .

Jeśli chcesz wyszukać wszystkie wolne sloty, na przykład przez 14 dni, możesz dodać HAVING:

group by id, endDate
having count(*) - (endDate is null) >= 14
order by id, startDate


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. równoważne nasłuchiwanie MySQL

  2. przestań wstawiać dane do bazy podczas odświeżania strony

  3. Usuń wszystkie procedury składowane w MySQL lub użyj tymczasowych procedur składowanych

  4. Błędy PHP -> Ostrzeżenie:mysqli_stmt::execute():Nie można pobrać mysqli_stmt | Ostrzeżenie:mysqli_stmt::zamknij()

  5. Pobierz bieżący rok i następny formularz mysql