sql >> Database >  >> RDS >> Mysql

MySQL Aantal dagen binnen een datumbereik, binnen een maand (boekingstabel)

Je zit op de goede weg. U moet uw zoekopdracht samenvoegen met een tabel van de maanden waarvoor u gegevens wilt, die ofwel permanent kunnen zijn of (zoals weergegeven in mijn voorbeeld hieronder) dynamisch kunnen worden aangemaakt in een UNION subquery:

SELECT   YEAR(month.d),
         MONTHNAME(month.d),
         SUM(1 + DATEDIFF( -- add 1 because start&finish on same day is still 1 day
           LEAST(Checkout, LAST_DAY(month.d)), GREATEST(Checkin, month.d)
         )) AS days
FROM     bookingdata
  RIGHT JOIN (
                   SELECT 20110101 AS d
         UNION ALL SELECT 20110201 UNION ALL SELECT 20110301
         UNION ALL SELECT 20110401 UNION ALL SELECT 20110501
         UNION ALL SELECT 20110601 UNION ALL SELECT 20110701
         UNION ALL SELECT 20110801 UNION ALL SELECT 20110901
         UNION ALL SELECT 20111001 UNION ALL SELECT 20111101
         UNION ALL SELECT 20111201
  ) AS month ON
             Checkin <= LAST_DAY(month.d)
         AND month.d <= Checkout
GROUP BY month.d

Bekijk het op sqlfiddle .




  1. Java SQL Server 2012 Kan databasefout niet openen

  2. Resultaten groeperen op aantal relaties

  3. MYSQL volgorde op tijd am/pm

  4. PayPal IPN werkt MySQL-database niet bij