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

beregne pris mellem givne datoer

Brug denne løsning:

SELECT     SUM(
               CASE WHEN a.Start_date = b.min_sd AND a.Start_date <> b.max_sd THEN
                        (DATEDIFF(a.End_date, '2012-08-30')+1) * a.Price
                    WHEN a.Start_date = b.max_sd AND a.Start_date <> b.min_sd THEN
                        DATEDIFF('2012-09-04', a.Start_date) * a.Price
                    WHEN (a.Start_date,a.Start_date) IN ((b.min_sd,b.max_sd)) THEN
                        (DATEDIFF('2012-09-04', '2012-08-30')+1) * a.Price
                    WHEN a.Start_date NOT IN (b.min_sd, b.max_sd)             THEN
                        (DATEDIFF(a.End_date, a.Start_date)+1) * a.Price
               END 
           ) AS totalprice
FROM       rooms a
CROSS JOIN (
           SELECT MIN(Start_date) AS min_sd,
                  MAX(Start_date) AS max_sd
           FROM   rooms
           WHERE  Room_type   = 'luxury'     AND
                  End_date   >= '2012-08-30' AND
                  Start_date <= '2012-09-04'
           ) b
WHERE      a.Room_type   = 'luxury'     AND
           a.End_date   >= '2012-08-30' AND
           a.Start_date <= '2012-09-04'

Erstat forekomster af 2012-08-30 og 2012-09-04 med dit input henholdsvis start- og slutdato.

Dette vil tage højde for start- og slutdatoer, der er i samme måned, samt spænder over flere måneder.

SQLFiddle Demo



  1. MySQL kontroller, om to datointervaller overlapper med input

  2. Hvorfor ville en IN-tilstand være langsommere end =i sql?

  3. Vælg en sekvens mellem to tal på MySQL

  4. BCrypt Bekræft gemt adgangskode-hash