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

Mysql समूह का उपयोग करके एक ही कॉलम में दो पंक्तियों के मानों को घटाएं आईडी

आपकी तिथियां गलत हैं। जब आप इस कॉलम के आधार पर ऑर्डर करते हैं, तो आप पहले दिन के हिसाब से ऑर्डर करते हैं। उचित आदेश वर्ष-महीने-दिन है। उचित डेटाटाइप, डेटाटाइम या टाइमस्टैम्प का प्रयोग करें। ऐसा करने के लिए आप निम्न कार्य कर सकते हैं:

alter table table1 add column d datetime;
update table1 set d = str_to_date(`Date`, '%d-%m-%Y %H:%i');
alter table table1 drop column `Date`;

आपका वांछित परिणाम प्राप्त करने के लिए प्रश्न यह है:

SELECT ID, d, Value,
       IF(@ID=ID, Value - @prevV, 'N/A') AS diff,
       @row_number:=CASE WHEN @ID=ID THEN @row_number+1 ELSE 1 END AS row_number,

       @prevV := Value,
       @ID:=ID AS ID
FROM table1
, (SELECT @row_number:=0, @ID:='', @prevV := NULL) AS t 
ORDER BY id, d;

आपको केवल पिछली पंक्ति के मान को बनाए रखने के लिए एक और चर जोड़ना है।

  • इसे एक sqlfiddle में लाइव काम करते हुए देखें
  • यह रहा एक और sqlfiddle यह दिखाने के लिए कि क्या होता है जब आपके पास प्रति आईडी 3 पंक्तियाँ होती हैं



  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 में सहेजें?

  2. विंडोज के लिए अनुशंसित MySQL ट्यूनिंग उपयोगिता

  3. इस PHP और MySQL कोड में SQL इंजेक्शन कैसे प्रदर्शित करें?

  4. MySQL:mysql से दूरस्थ कनेक्शन की अनुमति कैसे दें

  5. क्या MYSQL LIMIT कीवर्ड का कोई ANSI SQL विकल्प है?