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

बढ़ी हुई तारीख के साथ रिकॉर्ड अपडेट करने के लिए MySQL क्वेरी

कोशिश करें

UPDATE Table1 t1 JOIN
(
  SELECT id, @n := @n + 1 rnum
    FROM Table1 CROSS JOIN (SELECT @n := 0) i
   WHERE date IS NULL
   ORDER BY id
) t2 ON t1.id = t2.id CROSS JOIN
(
  SELECT MAX(date) date FROM Table1
) q
   SET t1.date = q.date + INTERVAL t2.rnum DAY

परिणाम:

|    ID |       DATE |
----------------------
| 10500 | 2013-08-18 |
| 10501 | 2013-08-16 |
| 10502 | 2013-08-17 |
| 10503 | 2013-08-19 |
| 10504 | 2013-08-20 | --  date has been assigned
| 10505 | 2013-08-21 | --  date has been assigned

यह रहा SQLFiddle डेमो

स्पष्टीकरण:उपनाम t2 के साथ एक उपश्रेणी में हम उन सभी पंक्तियों को पकड़ लेते हैं जहां दिनांक IS NULL उन्हें id द्वारा क्रमित करता है और 1 से शुरू होने वाली पंक्ति संख्या असाइन करें। दुर्भाग्य से MySql में ROW_NUMBER() के लिए कार्यान्वयन नहीं है फ़ंक्शन इसलिए हम इसे उपयोगकर्ता चर के साथ करते हैं @n पंक्तियों का चयन करते समय जो बढ़ाया जाता है। इस वेरिएबल को इनिशियलाइज़ करने के लिए हम एक उपनाम i . के साथ एक सबक्वेरी का उपयोग करते हैं . और CROSS JOIN का उपयोग करें इसे हमारी सबक्वायरी के लिए उपलब्ध कराने के लिए t2 . फिर हम उसी तकनीक का उपयोग करते हैं (CROSS JOIN ) तालिका में अधिकतम तिथि प्राप्त करने के लिए और इसे हमारे JOIN . में प्रत्येक पंक्ति के लिए उपलब्ध कराने के लिए . एक बार जब हमारे पास वह सब हो जाए तो हम सिर्फ एक लाइन नंबर जोड़ते हैं, जो कई दिनों का प्रतिनिधित्व करता है) इसे अधिकतम तिथि में जोड़ें और date को असाइन करें हमारी तालिका में कॉलम।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP में डेटाबेस से एकाधिक पंक्तियों को कैसे पुनर्प्राप्त करें

  2. MySQL:FROM क्लॉज लिमिटेशन में सबक्वेरी के साथ देखें

  3. खोल में चर का उपयोग करके mysql_config_editor को पासवर्ड पास करें

  4. सी # कनेक्टर/नेट के माध्यम से MySQL के साथ

  5. एक डेटाबेस में MyISAM और InnoDB टेबल