sql >> Databasteknik >  >> RDS >> Mysql

SQL För att kontrollera om rummet är ledigt mellan datumen

Detta kommer att svara på din specifika fråga med ja eller nej. Jag är inte säker på att det är användbart eftersom datumsökningsvärdena alla är specifika i en hårdkodad lista.

select coalesce(max('no'), 'yes') as available
from tbl t           
where room_type_id = 23 and
    dt in ("2018-03-06 00:00:00", "2018-03-07 00:00:00", 
           "2018-03-08 00:00:00", "2018-03-09 00:00:00");

Om känslan av din logik är avsedd att hitta minst en öppen datum då kan du prova något i stil med detta:

select case when count(*) = 4 then 1 else 0 end as whatever_this_means
from tbl t
where room_type_id = 23 and
    dt in ("2018-03-06 00:00:00", "2018-03-07 00:00:00", 
           "2018-03-08 00:00:00", "2018-03-09 00:00:00");

Problemet kommer att vara att du har hårdkodat värdet 4 nu som är kopplat till antalet datum i listan senare i frågan. Det finns sätt att hantera detta mer dynamiskt, men det framgår inte helt av din fråga det bästa sättet att göra det.



  1. Anropar PL/SQL-procedur med användardefinierad post som IN-parameter med JDBC

  2. Inkludera en extra räknare i MySQL-resultatuppsättningen

  3. Hur man laddar MySQL automatiskt vid start på OS X Yosemite / El Capitan

  4. Varför tillåter inte Oracle SQL oss att använda kolumnalias i GROUP BY-satser?