Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الاحتفاظ بصف واحد لكل مفتاح

جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy. الدرس 26 من 27.

غالبًا ما سيكون لديك جدول يظهر فيه مفتاح (عميل أو مستشعر أو منتج) عدة مرات، وتريد الاحتفاظ فقط بأحدث سجل، أو بالسجل ذي أعلى نتيجة.

استخدم ROW_NUMBER() بالطريقة نفسها التي استخدمتها مع top-N، ثم أبقِ على rn = 1.

WITH ranked AS (
    SELECT *,
           ROW_NUMBER() OVER (
               PARTITION BY customer_id ORDER BY purchased_at DESC
           ) AS rn
    FROM purchases
)
SELECT * FROM ranked WHERE rn = 1

تقول PARTITION BY «ترتيب واحد لكل مفتاح هذا»؛ وتقول ORDER BY «الأحدث أولًا». الصف 1 في كل قسم هو الصف الذي تريد الاحتفاظ به.

challenge icon

التحدي

متوسط

الجداول والأعمدة المتاحة:

  • readings: sensor_id، recorded_at، value

لكل مستشعر لديه 3 قراءات على الأقل، أعد القراءة الوحيدة ذات القيمة الأعلى. إذا تعادلت قراءتان في value، فاحتفظ بالأحدث.

أخرج sensor_id وrecorded_at وvalue، مرتبة حسب sensor_id.

جرّب بنفسك

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
    -- COUNT(*) OVER (PARTITION BY sensor_id) لتصفية المستشعرات التي لديها >= 3 قراءات
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس ما وراء الأساسيات

تدرّب بنفسك: Playground لـ SQL