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

MySQL Antal dage inden for et DateRange, inden for en måned (Booking Table)

Du er på de rigtige linjer. Du skal sammenføje din forespørgsel med en tabel over de måneder, du ønsker data for, som enten kan være permanente eller (som vist i mit eksempel nedenfor) oprettet dynamisk i en UNION underforespørgsel:

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

Se den på sqlfiddle .




  1. Django ConnectionAbortedError:[WinError 10053] En etableret forbindelse blev afbrudt af softwaren på din værtsmaskine

  2. Symfony:Doktrindataarmatur:hvordan håndterer man en stor csv-fil?

  3. PL/SQL utilstrækkelige privilegier inden for en forespørgsel manuelt mulig

  4. Linker libpqxx fra Visual Studio 2015 på Windows 10