Одна строка на ключ
Часть раздела Продвинутый уровень путешествия по 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 = 1PARTITION BY говорит: «один рейтинг для этого ключа»; ORDER BY говорит: «сначала самые новые». Строка 1 в каждой секции — это строка, которую нужно оставить.
Задание
СреднеДоступные таблицы и столбцы:
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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Продвинутый уровень
6Рецепты аналитики
Топ-N в группеПроцент от общегоНарастающий итогОдна строка на ключИтоги — Лучшие клиентыПотренируйтесь самостоятельно: Песочница SQL