Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

tính toán giá giữa các ngày nhất định

Sử dụng giải pháp này:

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'

Thay thế các lần xuất hiện của 2012-08-302012-09-04 với ngày bắt đầu và ngày kết thúc đầu vào của bạn tương ứng.

Điều này sẽ tính đến ngày bắt đầu và ngày kết thúc trong cùng một tháng cũng như kéo dài trong nhiều tháng.

SQLFiddle Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Câu lệnh chuẩn bị sẵn Mysqli (ngăn chặn tiêm SQL)

  2. Phân tích cú pháp json với mysql

  3. php không truyền theo các biến

  4. Thay đổi giá trị AUTO_INCREMENT theo kết quả được chọn

  5. Nhập csv vào mysql qua dòng lệnh