आपके समूहों को code = 100
. से शुरू करके परिभाषित किया गया है . ये थोड़ा पेचीदा है. MySQL 8+ में, आप समूहों को परिभाषित करने के लिए विंडो फ़ंक्शन का उपयोग कर सकते हैं और फिर row_number()
serial_number
असाइन करने के लिए :
select c.*,
row_number() over (partition by grp order by id) as serial_number
from (select c.*,
sum( code = 100 ) over (order by id) as grp
from carts c
) c;
यह MySQL के पुराने संस्करणों में बहुत अधिक जटिल है।
आप एक सबक्वेरी का उपयोग करके समूह की पहचान कर सकते हैं:
select c.*,
(select count(*)
from carts c2
where c2.id <= c.id and c2.code = 100
) as grp
from carts c;
फिर आप अपनी इच्छित जानकारी प्राप्त करने के लिए चरों का उपयोग कर सकते हैं:
select c.*,
(@rn := if(@g = grp, @rn + 1,
if(@g := grp, 1, 1)
)
) as serial_number
from (select c.*,
(select count(*)
from carts c2
where c2.id <= c.id and c2.code = 100
) as grp
from carts c
order by grp, id
) c cross join
(select @g := -1, @rn := 0) params;