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

Obliczanie całkowitej ilości sprzętu dla zakresu dat

Zacząłem od następującego kodu SQL, aby zebrać wszystkie zakresy dat, które przecinają się z podanym zakresem:

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

Skrzypce

To tylko pierwsza część. Następnie musisz wypracować możliwe nakładanie się; nie byłoby to praktyczne w przypadku SQL, więc sugerowałbym zrobienie tego w PHP.

Ogólny algorytm, który wybrałbym, to niestety O(n**2), wygląda to tak:

  • utwórz oś czasu (oddzieloną każdym dniem) z czasem jako osią poziomą
  • iteruj po każdym zakresie dat/czasów i zaznacz czas jego lewej i prawej krawędzi, aby utworzyć segmenty czasowe każdej możliwej permutacji.
  • używając segmentów, sumujesz w pionie dla nakładania się i bierzesz dzienne maksimum w poprzek.

Mam nadzieję, że to pomoże.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pokaż obraz BLOB PHP MySQL wraz z innymi danymi

  2. PHP-MySQL-Jak bezpiecznie zwiększać pole integer MySQL?

  3. Jak uruchomić polecenie MySQL na bash?

  4. AJAX aktualizuje bazę danych MYSQL za pomocą funkcji wywoływanej z HTML wygenerowanego z PHP

  5. Który jest szybszy:skorelowane podzapytania czy dołączanie?