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

Menghitung jumlah total peralatan untuk rentang tanggal

Saya mulai dengan SQL berikut untuk mengumpulkan semua rentang tanggal yang bersinggungan dengan rentang yang diberikan:

SELECT MAX(available) - IFNULL(SUM(amountInSch), 0)
FROM Table1
LEFT JOIN Table3 USING (eqid)
LEFT JOIN Table2 USING (scheduleid)
WHERE DATE(startDate) <= '2012-08-27' AND DATE(endDate) >= '2012-08-27'
  AND endTime > '08:30' AND startTime < '12:00'
  AND eqid = 1

Fiddle

Ini hanya bagian pertama. Selanjutnya Anda harus mencari kemungkinan tumpang tindih; ini tidak praktis untuk dilakukan dengan SQL, jadi saya sarankan untuk melakukan ini di PHP.

Sayangnya, algoritma generik yang akan saya pilih adalah O(n**2), seperti ini:

  • buat garis waktu (dibatasi oleh setiap hari) dengan waktu sebagai sumbu horizontal
  • ulangi setiap rentang tanggal/waktu dan tandai waktu tepi kiri dan kanannya untuk membuat segmen waktu dari setiap kemungkinan permutasi.
  • menggunakan segmen, Anda menjumlahkan secara vertikal untuk tumpang tindih dan mengambil jumlah maksimum harian.

Semoga membantu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Akses Koneksi Ditolak untuk pengguna www-data

  2. php:cara mengubah data string menjadi data numerik

  3. Mengisi Kesenjangan dalam Tanggal yang Dikembalikan dari Database - solusi SQL murni mungkin?

  4. PHP &MySQL membandingkan kata sandi

  5. Driver MySQL untuk Rails di Windows 7 x64