sql >> Database >  >> RDS >> Mysql

bereken prijs tussen bepaalde datums

Gebruik deze oplossing:

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'

Vervang exemplaren van 2012-08-30 en 2012-09-04 met uw invoer respectievelijk begin- en einddatum.

Dit houdt in dat start- en einddatums in dezelfde maand vallen en zich over meerdere maanden uitstrekken.

SQLFiddle-demo



  1. Kan XML-gegevens niet weergeven met PHP-script

  2. Is het mogelijk om een ​​tabel te maken met een variabelenaam in PostgreSQL?

  3. COMPOSE() Functie in Oracle

  4. Genereer PHP-array uit MySQL met sleutelwaarde uit kolom id