sql >> Databasteknik >  >> RDS >> Mysql

beräkna pris mellan givna datum

Använd den här lösningen:

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'

Ersätt förekomster av 2012-08-30 och 2012-09-04 med dina inmatade start- respektive slutdatum.

Detta kommer att ta hänsyn till start- och slutdatum som är i samma månad samt sträcker sig över flera månader.

SQLFiddle Demo



  1. FEL 1115 (42000):Okänd teckenuppsättning:'utf8mb4'

  2. Skicka en variabel till en trigger

  3. kapslad välj eller gå med i fråga?

  4. Vilket är formatet för PostgreSQL-anslutningssträngen/URL?