В plays приходят события прослушивания из приложения VK Музыки. Если связь пропала, приложение отправляет событие ещё раз с новым event_id. Копии одного прослушивания совпадают по user_id, track_id и played_at, а listened_sec у ранней копии может быть меньше: её отправили, пока трек ещё играл.
Схлопните копии, взяв у каждого прослушивания наибольший listened_sec. Прослушивание засчитывается, если listened_sec не меньше 30. Для каждого трека с хотя бы одним засчитанным прослушиванием верните track_id, plays — число засчитанных прослушиваний, listeners — число разных слушателей. Порядок — по plays по убыванию, затем по track_id.
В работе: Расчёт отчислений правообладателям: платят за засчитанное прослушивание, и дубль стоит денег.
Таблицы
plays — события прослушивания, возможны копии
| Колонка | Тип | Что значит |
|---|---|---|
event_id | int | ключ |
user_id | int | слушатель |
track_id | int | трек |
played_at | timestamp | начало прослушивания |
listened_sec | int | сколько секунд прослушано |
Пример: данные
plays · 7 строк
| event_id | user_id | track_id | played_at | listened_sec |
|---|---|---|---|---|
| 1 | 7 | 501 | 2026-05-04T08:10:00 | 12 |
| 2 | 7 | 501 | 2026-05-04T08:10:00 | 214 |
| 3 | 7 | 501 | 2026-05-04T08:10:00 | 214 |
| 4 | 8 | 501 | 2026-05-04T09:00:00 | 95 |
| 5 | 8 | 502 | 2026-05-04T09:04:00 | 18 |
| 6 | 9 | 502 | 2026-05-04T10:30:00 | 31 |
| 7 | 9 | 503 | 2026-05-04T10:35:00 | 29 |
Ожидаемый ответ
| track_id | plays | listeners |
|---|---|---|
| 501 | 2 | 2 |
| 502 | 1 | 1 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
track_id, plays, listeners
Источник: наша задача на данных VK: лог прослушиваний VK Музыки. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.