Menu
Coddy logo textTech

השארת שורה אחת לכל מפתח

חלק מהיחידה מעבר ליסודות במסלול ה-SQL של Coddy. שיעור 26 מתוך 27.

לעיתים קרובות תהיה לך טבלה שבה מפתח (לקוח, חיישן, מוצר) מופיע כמה פעמים, ואתה רוצה לשמור רק את העדכני ביותר, או את זה עם הציון הגבוה ביותר.

השתמשו ב־ROW_NUMBER() באותו אופן שבו השתמשתם בו עבור 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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה מעבר ליסודות

תרגלו בעצמכם: SQL אונליין