एक समूह में लगातार प्रविष्टियों को संक्षिप्त करने की एक सरल चाल है। यदि आप (row_number - entry) द्वारा समूहित करते हैं, तो जो प्रविष्टियाँ क्रमागत हैं वे उसी समूह में समाप्त हो जाएँगी। यहाँ एक उदाहरण दिया गया है जो दर्शाता है कि मेरा क्या मतलब है:
क्वेरी :
SELECT phonenum, @curRow := @curRow + 1 AS row_number, phonenum - @curRow
from phonenums p
join (SELECT @curRow := 0) r
परिणाम :
| PHONENUM | ROW_NUMBER | PHONENUM - @CURROW |
-------------------------------------------------
| 27100070000 | 1 | 27100069999 |
| 27100070001 | 2 | 27100069999 |
| 27100070002 | 3 | 27100069999 |
| 27100070003 | 4 | 27100069999 |
| 27100070004 | 5 | 27100069999 |
| 27100070005 | 6 | 27100069999 |
| 27100070008 | 7 | 27100070001 |
| 27100070009 | 8 | 27100070001 |
| 27100070012 | 9 | 27100070003 |
| 27100070015 | 10 | 27100070005 |
| 27100070016 | 11 | 27100070005 |
| 27100070040 | 12 | 27100070028 |
ध्यान दें कि कैसे लगातार सभी प्रविष्टियाँ PHONENUM - @CURROW
. के लिए समान मान रखती हैं . यदि हम उस कॉलम पर समूह बनाते हैं, और प्रत्येक समूह के न्यूनतम और अधिकतम का चयन करते हैं, तो आपके पास सारांश होता है (एक अपवाद के साथ:आप END मान को NULL
से बदल सकते हैं। यदि START =END यदि यह एक आवश्यकता है):
क्वेरी :
select min(phonenum), max(phonenum) from
(
SELECT phonenum, @curRow := @curRow + 1 AS row_number
from phonenums p
join (SELECT @curRow := 0) r
) p
group by phonenum - row_number
परिणाम :
| MIN(PHONENUM) | MAX(PHONENUM) |
---------------------------------
| 27100070000 | 27100070005 |
| 27100070008 | 27100070009 |
| 27100070012 | 27100070012 |
| 27100070015 | 27100070016 |
| 27100070040 | 27100070040 |
डेमो:http://www.sqlfiddle.com/#!2/59b04/5