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

MySQL बुकिंग उपलब्धता, अतिव्यापी तिथि सीमाएं

  1. वांछित अवधि में होने वाली सभी बुकिंग सीमाओं (अर्थात प्रारंभ और समाप्ति तिथि) की एक सूची तैयार करें:

      SELECT date_start AS boundary
      FROM   bookings
      WHERE  date_start BETWEEN @start AND @end
    UNION
      SELECT date_end
      FROM   bookings
      WHERE  date_end BETWEEN @start AND @end
    
  2. उस सीमा को जोड़ें जो वांछित अवधि से ठीक पहले होती है:

    -- [ from part 1 above ]
    UNION
      SELECT MAX(boundary)
      FROM (
        SELECT MAX(date_start) AS boundary
        FROM   bookings
        WHERE  date_start <= @start
      UNION ALL
        SELECT MAX(date_end)
        FROM   bookings
        WHERE  date_end <= @end
      ) t
    
  3. इस परिणाम और bookings . के बीच एक बाहरी जुड़ाव बनाएं तालिका, सभी सीमाओं को ध्यान में रखते हुए, लेकिन केवल एक बुकिंग सहित यदि यह एक साथ लोगों की संख्या में योगदान देता है बाद सीमा:

    FROM bookings RIGHT JOIN (
      -- [ from part 2 above ]
    ) t ON date_start <= boundary AND boundary < date_end
    
  4. प्रत्येक सीमा पर लोगों की संख्या का योग करें:

    SELECT IFNULL(SUM(quantity),0) AS simultaneous_people
    -- [ from part 3 above ]
    GROUP BY boundary
    
  5. अधिकतम और न्यूनतम खोजें:

    SELECT MIN(simultaneous_people),
           MAX(simultaneous_people)
    FROM (
      -- [ from part 4 above ]
    ) t
    

यह सब एक साथ रखना:

SELECT MIN(simultaneous_people),
       MAX(simultaneous_people)
FROM (
  SELECT IFNULL(SUM(quantity),0) AS simultaneous_people
  FROM   bookings RIGHT JOIN (
    SELECT date_start AS boundary
    FROM   bookings
    WHERE  date_start BETWEEN @start AND @end
  UNION
    SELECT date_end
    FROM   bookings
    WHERE  date_end BETWEEN @start AND @end
  UNION
    SELECT MAX(boundary)
    FROM (
      SELECT MAX(date_start) AS boundary
      FROM   bookings
      WHERE  date_start <= @start
    UNION ALL
      SELECT MAX(date_end)
      FROM   bookings
      WHERE  date_end <= @end
    ) t
  ) t ON date_start <= boundary AND boundary < date_end
  GROUP BY boundary
) t

इसे sqlfiddle पर देखें ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL/MySQL में, ज्वाइन स्टेटमेंट में ON और WHERE में क्या अंतर है?

  2. उन उपयोगकर्ताओं के लिए प्रश्न जो किसी विशिष्ट समूह में नहीं हैं? (EXCEPT का उपयोग करना चाहता था लेकिन ऐसा लगता है कि MySQL इसका समर्थन नहीं करता है)

  3. मैं सी++ माईएसक्यूएल कनेक्टर लाइब्रेरी को सेमेक से कैसे लिंक करूं?

  4. तालिका से एकाधिक आईडी चुनें

  5. क्या सम्मिलित करना संभव है और फिर एक के बाद एक सम्मिलित पंक्ति का चयन करें?