检索具有 DISTINCT 列的 ActiveRecord 关系,采用具有相同关系的列排序的第一个实例 [重复]

Posted

技术标签:

【中文标题】检索具有 DISTINCT 列的 ActiveRecord 关系,采用具有相同关系的列排序的第一个实例 [重复]【英文标题】:Retrieve a ActiveRecord Relation with a DISTINCT column, taking the first instance of a column's sort with the same relation [duplicate] 【发布时间】:2016-08-28 21:10:41 【问题描述】:

以下查询有问题:

我有一个surveyssurveys 表有一个指向 contact 的外键(通过 contact_id) 每个contact有多个surveys survey 有一个名为 scheduled_at 的列,其中包含时间数据

我想对Surveys 进行查询,每个contact 有一个实例,其中survey 与具有相同contact 外键的其他实例相比具有最近的scheduled_at。

this seems like a good SQL answer,想知道有没有更干净的 ActiveRecord 解决方案?

【问题讨论】:

【参考方案1】:

尝试运行以下。

@contact.surveys.order(scheduled_at: :desc).first(5)

这将返回该订单最近的 5 次调查。

假设: @contact 是您的 Contact 模型的对象

【讨论】:

最终目标是每个contact_id 仅返回1 个survey 实例,并且该实例具有最新的scheduled_at。这只返回一个Contact。我需要它基于Survey 我假设您有 params[:contact_id] 变量,并且您想要对此 contact_id 的最新调查。尝试运行此代码。 Survey.where(contact_id: params[:contact_id]).order(scheduled_at: :desc).first 我没有参数。我需要每个联系人的最新调查,而不仅仅是一个。 使用这个Contacts.find_each do |contact| latest_survey_array << contact.surveys.order(scheduled_at: :desc).first end 我希望这对你有用。 latest_survey_array 将为每个联系人提供所有最新调查 在检索正确的记录时,我想用ActiveRecord 这样做(如上所述)。

以上是关于检索具有 DISTINCT 列的 ActiveRecord 关系,采用具有相同关系的列排序的第一个实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

一个表上具有不同列的 SQL 连接

02 检索不同的行 distinct

SQLite - 选择一列的 DISTINCT 并获取其他列

如何遍历大型 Pyspark Dataframe 中列的不同值? .distinct().collect() 引发大任务警告

21-8 数据检索2 top和distinct

在 sqlalchemy 中使用 distinct()/group_by() 获取基于每个“名称”列的最新记录