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

एकाधिक पंक्ति दिनांक अंतर का योग Mysql

प्रत्येक पंक्ति के लिए, उच्च (बाद में) लॉगडेट वाली पहली पंक्ति खोजें। यदि इस पंक्ति में गति 10 से कम है, तो इस पंक्ति की तिथि और अगली पंक्ति की तिथि के बीच दिनांक अंतर गिनें, अन्यथा 0 डाल दें।

इस तरह से गिने जाने वाले मानों की सूची देने वाली एक क्वेरी इस तरह दिखनी चाहिए:

SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
       ) AS seconds_below_10
FROM car_log c1

अब बस इसे सारांशित करने की बात है:

SELECT sum( seconds_below_10) FROM 
( SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
          ) AS seconds_below_10
  FROM car_log c1 ) seconds_between_logs

CarId जोड़ने के बारे में टिप्पणी के बाद अपडेट करें:

जब आपके पास 1 से अधिक कार हों, तो आपको निर्भर सबक्वायरी के अंदर एक और WHERE कंडीशन जोड़ने की आवश्यकता होती है (हम उस सटीक कार के लिए अगला लॉग चाहते हैं, न कि केवल कोई अगला लॉग) और CarId द्वारा संपूर्ण रोसेट को समूहित करें, संभवतः दिखाने के लिए चयन करने के लिए उक्त CarId को जोड़ना यह भी।

SELECT sbl.carId, sum( sbl.seconds_below_10 ) as `seconds_with_speed_less_than_10` FROM
( SELECT c1.carId, 
         ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate AND c2.carId = c1.carId
           LIMIT 1 ) AS seconds_below_10
  FROM car_log c1 ) sbl
GROUP BY sbl.carId

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. पासवर्ड साल्ट -- क्या मैं इसे सही कर रहा हूँ?

  2. एक कॉलम में अधिकतम के साथ पंक्ति का चयन करना - MySQL

  3. ईआर आरेख से संबंध विशेषताओं का SQL में अनुवाद करना

  4. PHP, टेक्स्ट इकोस नई लाइन के बिना डेटाबेस से बाहर, सभी एक टुकड़े में

  5. यदि मौजूद नहीं है तो MySQL कॉलम जोड़ें