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

vypočítat cenu mezi danými termíny

Použijte toto řešení:

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'

Nahradit výskyty 2012-08-30 a 2012-09-04 se zadanými počátečními a koncovými daty.

To bude zohledňovat počáteční a koncová data, která budou ve stejném měsíci, a také několik měsíců.

Ukázka SQLFiddle



  1. Jak aktualizovat více sloupců v PostgreSQL

  2. Pochopení nové vlny tepla MySQL

  3. náhodná čísla v java

  4. Vytvoření řízení přístupu založeného na rolích v MongoDB