MySQL में, ऐसा करने का सबसे सुरक्षित तरीका शायद वेरिएबल को शामिल करता है:
select im.*
from (select im.*,
(@rn := if(@p = platform_type_id, @rn + 1,
if(@p := platform_type_id, 1, 1)
)
) as rn
from main_itemmaster im cross join
(select @rn := 0, @p := '') params
order by platform_type_id, (territory_id = 'US') desc
) im
where rn = 1;
इसमें MySQL (गलत) सुविधा का उपयोग शामिल नहीं है जो SELECT
. में कॉलम की अनुमति देता है एक एकत्रीकरण क्वेरी की जो समेकित नहीं है और GROUP BY
. में नहीं है .
यहां एक SQL Fiddle है जो इसे काम करते हुए दिखा रही है।
संपादित करें:
चर के मूल्यांकन के आदेश के विषय पर। दस्तावेज़ीकरण से :
उपरोक्त कोड, तकनीकी रूप से, चर को उसी कथन . में पढ़ता है , लेकिन यह भी उसी अभिव्यक्ति . में है . if()
. के शब्दार्थ (और case
जिसका मैं कभी-कभी उपयोग भी करता हूं) भावों के मूल्यांकन के क्रम की गारंटी देता हूं।