يبدأ ترقيم ROW_NUMBER() من واحد داخل كل قسم تحدده PARTITION BY. لا تواصل الدالة الترقيم من القسم السابق، حتى لو ظهرت الصفوف متجاورة في النتيجة النهائية. هذا يجعل الرقم يعبر عن موقع الصف داخل مجموعته، وليس موقعه بين جميع صفوف الجدول.
لنفترض أننا نرتب الطلبات داخل كل عميل بحسب تاريخ الإنشاء. أول طلب لكل عميل يحصل على الرقم واحد، ويأخذ الطلب التالي الرقم اثنين. ويمكن بعد ذلك استخدام هذه الأرقام لاختيار أول طلب أو آخر طلب لكل عميل، بحسب اتجاه الترتيب المستخدم.
مثال
WITH orders AS (
SELECT 1 AS id, 10 AS customer_id
UNION ALL SELECT 2, 10
UNION ALL SELECT 3, 20
)
SELECT id, customer_id,
ROW_NUMBER() OVER (
PARTITION BY customer_id ORDER BY id
) AS rn
FROM orders
ORDER BY id;
في المثال يوجد عميل له طلبان وعميل له طلب واحد. لذلك يتكرر الرقم واحد في النتيجة، وهذا أمر صحيح لأن كل ظهور له ينتمي إلى قسم مختلف. لا يعني تكرار الرقم وجود خلل في دالة الترقيم أو تكرار في المعرّف الأصلي.
باختصار: يكون رقم الصف فريدًا داخل قسمه، ويبدأ من واحد مرة أخرى لكل قيمة جديدة من أعمدة التقسيم.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.