Rails удалить дубликаты, оставив самые новые записи
В бд есть записи результатов бегунов. Таблица Results имеет поля athlete_id (id спортсмена), created_at (дата/время создания записи), time (результат забега). У каждого бегуна может быть несколько записей результатов. Как сделать выборку результатов всех бегунов, чтобы в нее попали только последние созданные записи каждого бегуна?
Ответы (2 шт):
Автор решения: cauf
→ Ссылка
можно попробовать сделать через подзапрос. Например так:
select distinct
res1.athlete_id,
(
select top 1
res2.time
from
Result as res2
where
res2.athlete_id = res1.athlete_id
order by
res2.created_at
) as last_time
from
Results as res1;
Автор решения: Василиса
→ Ссылка
Если у вас PostgreSQL, то задачка легко решается через DISTINCT ON
Result.select('DISTINCT ON (athlete_id) *').order(created_at: :desc)
Из таблицы результатов будет взято по одной записи для каждого бегуна. Так как она отсортирована по created_at, то будет взята самая последняя по времени