TransWikia.com

Rails удалить дубликаты, оставив самые новые записи

Stack Overflow на русском Asked by DogeDev on December 11, 2021

В бд есть записи результатов бегунов.
Таблица Results имеет поля athlete_id (id спортсмена), created_at (дата/время создания записи), time (результат забега). У каждого бегуна может быть несколько записей результатов.
Как сделать выборку результатов всех бегунов, чтобы в нее попали только последние созданные записи каждого бегуна?

2 Answers

Если у вас PostgreSQL, то задачка легко решается через DISTINCT ON

Result.select('DISTINCT ON (athlete_id) *').order(created_at: :desc)

Из таблицы результатов будет взято по одной записи для каждого бегуна. Так как она отсортирована по created_at, то будет взята самая последняя по времени

Answered by Василиса on December 11, 2021

можно попробовать сделать через подзапрос. Например так:

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;

Answered by cauf on December 11, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP