दुर्भाग्य से, MySQL में विंडोिंग फ़ंक्शन नहीं हैं, जिसकी आपको आवश्यकता होगी। तो आपको कुछ इस तरह इस्तेमाल करना होगा:
अंतिम प्रश्न
select data, group_row_number, overall_row_num
from
(
select data,
@num := if(@data = `data`, @num + 1, 1) as group_row_number,
@data := `data` as dummy, overall_row_num
from
(
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num
) x
order by overall_row_num
देखें SQL Fiddle with Demo
स्पष्टीकरण:
सबसे पहले, आंतरिक चयन करें, यह एक नकली row_number
लागू होता है अपनी तालिका के सभी रिकॉर्ड के लिए (देखें SQL Fiddle with Demo
):
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
क्वेरी का दूसरा भाग, आपकी तालिका में प्रत्येक पंक्ति की तुलना अगले एक से करता है, यह देखने के लिए कि क्या इसका मान समान है, यदि यह नहीं है तो group_row_number
प्रारंभ करें ओवर (देखें SQL Fiddle with Demo
):
select data,
@num := if(@data = `data`, @num + 1, 1) as group_row_number,
@data := `data` as dummy, overall_row_num
from
(
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num
अंतिम चयन, आपके इच्छित मान लौटाता है और आपके द्वारा अनुरोधित क्रम में उन्हें वापस रखता है:
select data, group_row_number, overall_row_num
from
(
select data,
@num := if(@data = `data`, @num + 1, 1) as group_row_number,
@data := `data` as dummy, overall_row_num
from
(
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num
) x
order by overall_row_num