sql >> Databáze >  >> RDS >> Mysql

MySQL Počet dní v rámci DateRange, uvnitř měsíce (Tabulka rezervací)

Jste na správných liniích. Musíte spojit svůj dotaz s tabulkou měsíců, pro které chcete data, která může být buď trvalá, nebo (jak je ukázáno v mém příkladu níže) vytvořená dynamicky v UNION dílčí dotaz:

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

Podívejte se na sqlfiddle .




  1. Jak vypočítat procento sloupce v MySQL

  2. Filtrovat data MySQL v PHP, aby se zobrazila pouze data uživatele aktuální relace?

  3. Nelze převést hodnotu data/času MySQL na System.DateTime.Could't uložit hodnotu 0/0/0000 0:00:00?

  4. Výkon rekurzivních uložených procedur v MYSQL pro získání hierarchických dat