الاحتفاظ بصف واحد لكل مفتاح
جزء من قسم ما وراء الأساسيات في رحلة 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 في كل قسم هو الصف الذي تريد الاحتفاظ به.
التحدي
متوسطالجداول والأعمدة المتاحة:
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
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس ما وراء الأساسيات
6وصفات التحليل
أفضل N لكل مجموعةالنسبة المئوية من الإجماليالمجموع التراكميالاحتفاظ بصف واحد لكل مفتاحملخص - أفضل العملاءتدرّب بنفسك: Playground لـ SQL