检索具有 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 【问题描述】:以下查询有问题:
我有一个surveys
表
surveys
表有一个指向 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 关系,采用具有相同关系的列排序的第一个实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
SQLite - 选择一列的 DISTINCT 并获取其他列
如何遍历大型 Pyspark Dataframe 中列的不同值? .distinct().collect() 引发大任务警告