कोशिश करें
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
को असाइन करें हमारी तालिका में कॉलम।