Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

hitung harga antara tanggal yang diberikan

Gunakan solusi ini:

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'

Ganti kemunculan 2012-08-30 dan 2012-09-04 dengan tanggal mulai dan akhir masukan Anda masing-masing.

Ini akan memperhitungkan tanggal mulai dan akhir berada di bulan yang sama serta mencakup beberapa bulan.

Demo 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. mysql pilih jumlah baris antara rentang waktu

  2. Bisakah sebuah tabel memiliki dua kunci asing?

  3. Tabel Sementara di Fungsi Tersimpan?

  4. Saat menggunakan NetBeans untuk men-debug skrip PHP untuk mengubah catatan tabel, 'affected_rows' akan berubah dari 1 menjadi -1

  5. hapus min. nilai dari catatan setelah membandingkan dua nilai dari tabel di sql