SELECT mo.Letter, md.Rank
FROM (
SELECT DISTINCT letter
FROM mytable
) mo
JOIN mytable md
ON md.Letter >= mo.Letter
AND md.Letter <= mo.Letter
AND Rank <=
COALESCE
(
(
SELECT Rank
FROM mytable mi
WHERE mi.letter = mo.letter
ORDER BY
Rank
LIMIT 1, 1
),
0xFFFFFFFF
)
आपको (Letter, Rank) . पर एक कंपोजिट इंडेक्स होना चाहिए (इस क्रम में)
इस निर्माण पर ध्यान दें:
md.Letter >= mo.Letter
AND md.Letter <= mo.Letter
केवल md.Letter = mo.Letter . के बजाय
यह Range checked for each record . को बाध्य करता है जो अधिक कुशल है।
इस लेख को मेरे ब्लॉग में देखें:
इसके बारे में अधिक जानकारी के लिए।