Menu
CoddyTech

Одна строка на ключ

Часть раздела Продвинутый уровень путешествия по 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 показания, верните единственное показание с наибольшим значением. Если значения двух показаний совпадают, оставьте более позднее.

Выведите sensor_id, recorded_at, value, отсортированные по sensor_id.

Попробуйте сами

WITH ranked AS (
    -- TODO: выбрать каждое показание с его порядковым номером в пределах своего датчика (rn)
    -- и количество показаний этого датчика (total_readings)
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Продвинутый уровень

Потренируйтесь самостоятельно: Песочница SQL