Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

दो तिथियों के बीच उपलब्ध कमरों का चयन करें

यहां आपके लिए एक पूर्ण उत्तर देना कठिन है, क्योंकि आप हमें केवल वह तालिका दिखा रहे हैं जिसमें बुकिंग है - हम नहीं जान सकते कि कितने कमरे उपलब्ध हैं।

SQL जो उन कमरों के लिए रूम_आईडी लौटाता है, जो चयनित अवधि के कम से कम भाग के लिए बुक किए गए हैं:

SELECT `room_id` , COUNT(*)
FROM `bookings`
WHERE `dt` BETWEEN "[start date]" AND "[end date]"
GROUP BY `room_id`;

यदि आपके पास कमरों की एक तालिका थी (बुकिंग के बजाय), तो आपके लिए उस अवधि के दौरान बुक नहीं किए गए किसी भी कमरे की सूची लौटाना संभव होगा:

SELECT `id`
FROM `rooms`
WHERE `id` NOT IN (
  SELECT DISTINCT( `room_id` )
  FROM `bookings`
  WHERE `dt` BETWEEN "[start date]" AND "[end date]"
);

संशोधन

ओपी की प्रतिक्रिया के आधार पर, अब धारणाएँ हैं:

  • तालिका में उन कमरों का विवरण है जो दिनांक से प्रारंभ होने वाली अवधि के लिए कॉलम dt में उपलब्ध हैं। और अगले दिन समाप्त होता है (अर्थात होटल के कमरे)
  • क्वेरी को किसी भी कमरे को वापस करना चाहिए जो दर्ज की गई अवधि की पूरी अवधि के लिए उपलब्ध हैं (इसलिए केवल डीएवाई ए से डे बी तक उपलब्ध कमरे ही वापस किए जाएंगे।

जैसे, संशोधित कोड है:

SELECT room_id
FROM available_rooms
WHERE dt BETWEEN "[start date]" AND DATE_SUB("[end date]",INTERVAL 1 DAY)
GROUP BY room_id
HAVING COUNT(*)=ABS(DATEDIFF("[start date]","[end date]"));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql से php से xml खाली उम्र दिखाता है

  2. अल्पविराम से अलग किए गए मान की खोज कैसे करें

  3. Mysql तालिका में अधिकतम मान पंक्ति का चयन कैसे करें

  4. क्या हम SQL को S3 बकेट से AWS ec2 (उदाहरण) में आयात कर सकते हैं?

  5. ज़ेंड फ्रेमवर्क डेवलपर के लिए सर्वश्रेष्ठ ई-कॉमर्स शॉपिंग कार्ट