Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

किसी दिनांक सीमा के लिए उपकरणों की कुल मात्रा की गणना करना

मैंने दी गई सीमा के साथ प्रतिच्छेद करने वाली सभी तिथि सीमाओं को इकट्ठा करने के लिए निम्नलिखित SQL के साथ शुरुआत की:

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

यह केवल पहला भाग है। आगे आपको संभावित अतिव्यापनों पर काम करना होगा; एसक्यूएल के साथ ऐसा करना व्यावहारिक नहीं होगा, इसलिए मैं इसे PHP में करने का सुझाव दूंगा।

दुर्भाग्य से मैं जो सामान्य एल्गोरिथ्म चुनूंगा वह ओ (एन ** 2) है, यह इस प्रकार है:

  • क्षैतिज अक्ष के रूप में समय के साथ एक समयरेखा (प्रत्येक दिन द्वारा निर्धारित) बनाएं
  • प्रत्येक दिनांक/समय सीमा पर पुनरावृति करें और प्रत्येक संभावित क्रमपरिवर्तन के समय खंड बनाने के लिए इसके बाएं और दाएं किनारे के समय को चिह्नित करें।
  • सेगमेंट का उपयोग करके, आप ओवरलैप के लिए लंबवत योग करते हैं और आप दैनिक अधिकतम लेते हैं।

आशा है कि यह मदद करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. माउंटेन लायन पर MySQLdb कैसे स्थापित करें

  2. CSV से MySQL DB में डेटा सम्मिलित करना बहुत धीमा है

  3. लगातार विज़िट की संख्या गिनें

  4. MySQL प्राथमिक कुंजी अपडेट कर रहा है

  5. यदि कोई मान नहीं मिलता है तो मैं '0' वापस करने के लिए MySQL में SUM फ़ंक्शन कैसे प्राप्त करूं?