sql >> Database teknologi >  >> RDS >> Mysql

Find datohuller med mysql

Dette skulle give det korrekte resultat:

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

se den her .

Hvis du skal søge efter alle gratis slots på f.eks. 14 dage, kan du tilføje HAVING:

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


  1. Symfony:Der opstod en undtagelse i driveren:kunne ikke finde driveren med mysql

  2. Gør tilføjelse af 'LIMIT 1' til MySQL-forespørgsler dem hurtigere, når du ved, at der kun vil være 1 resultat?

  3. Forebyggelse af SQL-injektion på login-side i PHP

  4. Udvid EM Grid Control til nye noder