如何为每个给定的另一个属性值选择一个具有最大值的模型?

阿尔玛龙

我有一个Work带有video_id,auser_id和其他一些简单字段的模型。我需要在页面上显示最后12幅作品,但每位用户只需花1幅。目前,我正在尝试这样做:

 def self.latest_works_one_per_user(video_id=nil)
   scope = self.includes(:user, :video)
   scope = video_id ? scope.where(video_id: video_id) : scope.where.not(video_id: nil)
   scope = scope.order(created_at: :desc)
   user_ids = works = []
   scope.each do |work|
     next if user_ids.include? work.user_id
     user_ids << work.user_id
     works << work
     break if works.size == 12
   end
   works
 end

但我敢肯定,这样做的方式会更优雅,更快捷,尤其是当作品数量增加时。

戴夫·斯威斯古斯(Dave Schweisguth)

这是一种对任何SQL数据库都可以进行最小调整的解决方案。人们是否认为它很优雅取决于您对SQL的喜欢程度。

def self.latest_works_one_per_user(video_id=nil)
   scope = includes(:user, :video)
   scope = video_id ? scope.where(video_id: video_id) : scope.where.not(video_id: nil)
   scope.
     joins("join (select user_id, max(created_at) created_at
                    from works group by created at) most_recent
                  on works.user_id = most_recent.user_id and
                    works.created_at = most_recent.created_at").
     order(created_at: :desc).limit(12)
end

但是,仅当user_id和created_at的组合是唯一的时才有效。如果该组合不是唯一的,您将获得超过12行。

可以在MySQL中更简单地完成。MySQL解决方案在Postgres中不起作用,我不确定在Postgres中有更好的解决方案,尽管我敢肯定有一个解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为每个给定的另一个属性值选择一个具有最大值的模型?

来自分类Dev

MySQL更新表仅具有另一个表的最大值

来自分类Dev

如何从行中选择最大值并连接到另一个表

来自分类Dev

如何在Postgres中检索具有另一个最大值分组的最大值的完整记录?

来自分类Dev

如何使用具有另一个给定属性值的元素访问命名属性

来自分类Dev

与另一个表的最大值合并

来自分类Dev

MySQL连接两个表,另一个字段具有最大值

来自分类Dev

使用LINQ从另一个属性分组的列表中删除除最大值以外的所有值

来自分类Dev

如何根据另一个属性的值选择最大数量?

来自分类Dev

从具有给定属性和值的xml中提取值,然后获取另一个属性的值

来自分类Dev

如何为每个表定义一个列表的一个字段的最大值?

来自分类Dev

SQL,从另一个表中选择最大值

来自分类Dev

获取一个字段的最大值,但仅针对另一个字段中具有相同值的其他文档

来自分类Dev

列值是另一个值相同的另一列的最大值

来自分类Dev

查找另一个最大值查询的最大值

来自分类Dev

定义一个具有最大值的变量。

来自分类Dev

选择每个ID的最大值(包括一个ID可能有多个最大值!)

来自分类Dev

如何根据另一个变量提取具有相同最大日期的dup值?

来自分类Dev

如何为另一个列中具有相同值的每个结果将时间戳记值加一

来自分类Dev

如何根据最大值从另一个表加入

来自分类Dev

如何根据另一个滑块更改滑块的最大值

来自分类Dev

选择其中一个联接具有最大值的记录

来自分类Dev

C#LINQ选择具有一个属性相同值的对象将另一个属性值合并

来自分类Dev

如何检查张量的 argmax 是否等于另一个具有多个相等最大值的张量的任何 argmax?

来自分类Dev

使用一个datepicker的电流值作为另一个的DatePicker的最小值/最大值

来自分类Dev

在另一个3个值的总和中找到一个数组中的最大值

来自分类Dev

SQL语句获取具有一个属性但没有另一个属性的值

来自分类Dev

SQLlite在获取另一个属性的最大值之后尝试获取一个属性的最小值

来自分类Dev

如何在LINQ中构造一个具有最大值的Have语句?

Related 相关文章

  1. 1

    如何为每个给定的另一个属性值选择一个具有最大值的模型?

  2. 2

    MySQL更新表仅具有另一个表的最大值

  3. 3

    如何从行中选择最大值并连接到另一个表

  4. 4

    如何在Postgres中检索具有另一个最大值分组的最大值的完整记录?

  5. 5

    如何使用具有另一个给定属性值的元素访问命名属性

  6. 6

    与另一个表的最大值合并

  7. 7

    MySQL连接两个表,另一个字段具有最大值

  8. 8

    使用LINQ从另一个属性分组的列表中删除除最大值以外的所有值

  9. 9

    如何根据另一个属性的值选择最大数量?

  10. 10

    从具有给定属性和值的xml中提取值,然后获取另一个属性的值

  11. 11

    如何为每个表定义一个列表的一个字段的最大值?

  12. 12

    SQL,从另一个表中选择最大值

  13. 13

    获取一个字段的最大值,但仅针对另一个字段中具有相同值的其他文档

  14. 14

    列值是另一个值相同的另一列的最大值

  15. 15

    查找另一个最大值查询的最大值

  16. 16

    定义一个具有最大值的变量。

  17. 17

    选择每个ID的最大值(包括一个ID可能有多个最大值!)

  18. 18

    如何根据另一个变量提取具有相同最大日期的dup值?

  19. 19

    如何为另一个列中具有相同值的每个结果将时间戳记值加一

  20. 20

    如何根据最大值从另一个表加入

  21. 21

    如何根据另一个滑块更改滑块的最大值

  22. 22

    选择其中一个联接具有最大值的记录

  23. 23

    C#LINQ选择具有一个属性相同值的对象将另一个属性值合并

  24. 24

    如何检查张量的 argmax 是否等于另一个具有多个相等最大值的张量的任何 argmax?

  25. 25

    使用一个datepicker的电流值作为另一个的DatePicker的最小值/最大值

  26. 26

    在另一个3个值的总和中找到一个数组中的最大值

  27. 27

    SQL语句获取具有一个属性但没有另一个属性的值

  28. 28

    SQLlite在获取另一个属性的最大值之后尝试获取一个属性的最小值

  29. 29

    如何在LINQ中构造一个具有最大值的Have语句?

热门标签

归档