Mysql
 sql >> Baza danych >  >> RDS >> Mysql

oblicz cenę pomiędzy podanymi datami

Użyj tego rozwiązania:

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'

Zastąp wystąpienia 2012-08-30 i 2012-09-04 z wprowadzonymi datami rozpoczęcia i zakończenia odpowiednio.

Spowoduje to, że daty rozpoczęcia i zakończenia będą w tym samym miesiącu, a także będą obejmować wiele miesięcy.

Pokaz SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sunspot solr niezdefiniowany typ pola

  2. Mysql Wygeneruj każdą datę z listy zakresów dat

  3. Jak mogę spowolnić zrzut MySQL, aby nie wpływać na bieżące obciążenie serwera?

  4. Jak wygenerować losowy przedział czasu i dodać go do daty i godziny mysql za pomocą php?

  5. Wartości Auto_increment w InnoDB?