मैंने इसे हल कर लिया है, यहां एक बेहतरीन ब्लॉग पोस्ट से मदद के लिए धन्यवाद:http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/
समाधान गैर-तुच्छ है, जिसमें चर और कुछ उन्नत ज्ञान की आवश्यकता होती है कि कैसे MySQL अपने क्वेरी संचालन का आदेश देता है, लेकिन यह काफी प्रदर्शन करने वाला प्रतीत होता है। चाबियों में से एक यह है कि परिवर्तनीय असाइनमेंट फ़ंक्शन कॉल के भीतर छुपाए जा सकते हैं!
अनिवार्य रूप से, निम्न क्वेरी समस्या का समाधान करती है:
SET @num := 0, @type := '';
SELECT name, subgroup, @num AS increment
FROM table_name
WHERE 0 <= GREATEST(
@num := IF(@type = subgroup, @num + 1, 1),
LEAST(0, LENGTH(@type := subgroup)))
फंक्शन GREATEST
, LEAST
, और LENGTH
वेरिएबल असाइनमेंट के लिए कंटेनर के रूप में ही हैं। जैसा कि आप देख सकते हैं, वे फ़ंक्शन अनिवार्य रूप से क्वेरी के आउटपुट को प्रभावित करने के लिए कुछ नहीं कर रहे हैं।
हालाँकि, मैंने यह भी पाया कि मेरी तालिका में "उपसमूह" मान थे जो लगातार नहीं थे। उदाहरण के लिए:
+------+----------+
| name | subgroup |
+------+----------+
| john | 1 |
| doe | 1 |
| jim | 1 |
| greg | 2 |
| boe | 2 |
| amos | 3 |
| ben | 1 |
| gary | 2 |
+------+----------+
इस प्रकार एक आउटपुट तालिका में परिणाम:
+------+----------+-----------+
| name | subgroup | increment |
+------+----------+-----------+
| john | 1 | 1 |
| doe | 1 | 2 |
| jim | 1 | 3 |
| greg | 2 | 1 |
| boe | 2 | 2 |
| amos | 3 | 1 |
| ben | 1 | 1 |
| gary | 2 | 1 |
+------+----------+-----------+
ORDER BY
को टटोलना क्वेरी के अंत में क्लॉज निष्पादन आदेश के कारण काम नहीं करता था, और वेरिएबल असाइनमेंट को ORDER BY
में छुपाता था क्लॉज करीब आया लेकिन इसके अपने मुद्दे थे, इसलिए यहां अंतिम क्वेरी है जिसका मैंने उपयोग किया:
SET @num := 0, @type := '';
SELECT name, subgroup, @num AS increment
FROM (SELECT * FROM table_name ORDER BY subgroup) AS table_name2
WHERE 0 <= GREATEST(
@num := IF(@type = subgroup, @num + 1, 1),
LEAST(0, LENGTH(@type := subgroup)))
निम्नलिखित आउटपुट में परिणाम:
+------+----------+-----------+
| name | subgroup | increment |
+------+----------+-----------+
| john | 1 | 1 |
| doe | 1 | 2 |
| jim | 1 | 3 |
| ben | 1 | 4 |
| greg | 2 | 1 |
| boe | 2 | 2 |
| gary | 2 | 3 |
| amos | 3 | 1 |
+------+----------+-----------+
जय!