Проблемы с поиском наиболее эффективного способа обработки запросов такого типа.
У меня есть 3 модели:
User
, Location
и Query
# User
has_many :queries
# Query
belongs_to: :user
belongs_to :location
Я использую user.queries
для статистики, так как она содержит дополнительные метаданные, в столбце location_id
есть много дубликатов, если они выполняют один и тот же запрос, но у каждого будут разные метаданные, поэтому они записываются как отдельные record.
Я хотел бы создать так называемый history
, который выбирает самый последний отдельный location_id
из User.queries
и возвращает их в порядке id
или created_at
, сохраняя его как ActiveRecord Collection и не преобразует его в массив, чтобы его можно было повторять для рендеринга.
user.queries.select(:location_id).distinct
близко, но не упорядочено.
Появляется следующий необработанный SQL работать, но есть ли способ написать это с ActiveRecord
queries.find_by_sql("
SELECT location_id, created_at
FROM (SELECT DISTINCT ON (queries.location_id) *
FROM queries
ORDER BY queries.location_id, queries.created_at DESC) queries
ORDER BY queries.created_at DESC
LIMIT 20
")