別の属性の特定の値に対して、属性の最大値を持つ各モデルを選択するにはどうすればよいですか?

アルマロン

私が持っているWorkとモデルvideo_iduser_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

しかし、特に作品の数が増えると、もっとエレガントで速い方法があると確信しています。

デイブシュヴァイスガス

これは、最小限の調整で任意の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

jQueryで特定のデータ属性を持つ要素を選択するにはどうすればよいですか?価値は関係ありません

分類Dev

HSQLの各グループの列に最大値を持つ行を選択するにはどうすればよいですか?

分類Dev

特定の属性値を持つXDocumentから特定のノードを選択するにはどうすればよいですか?

分類Dev

他の列の最大値を持つ列、および別のテーブルの列の対応するすべての行を選択するにはどうすればよいですか?

分類Dev

各列の最大値に基づいて列を選択するにはどうすればよいですか?

分類Dev

dplyrで各グループの最大値を持つ行を選択するにはどうすればよいですか?

分類Dev

SQLの別のテーブルの別の値に対応するすべての値を選択するにはどうすればよいですか

分類Dev

別の属性の値に基づいて最大数を選択するにはどうすればよいですか?

分類Dev

[パンダ]:パンダの別の列要素の最大値に対応する特定の列要素を選択するにはどうすればよいですか?

分類Dev

C#でgmlファイルを解析しながら特定の属性を持つ特定の要素を選択するにはどうすればよいですか?

分類Dev

Access2016の別の列で最大値を持つ個別の行を選択するにはどうすればよいですか

分類Dev

特定の基準に対して個別のペア値を選択するSQLクエリを作成するにはどうすればよいですか?

分類Dev

SQL-特定の列内で最大値を持つデータ行を選択するにはどうすればよいですか?【バージョン2】

分類Dev

srcset属性の値を選択して使用するにはどうすればよいですか?

分類Dev

SQL 2008で特定の列値を持つ列を選択するにはどうすればよいですか?

分類Dev

jQueryを使用して特定のARIA値を持つすべての要素を選択するにはどうすればよいですか?

分類Dev

AngularJSを使用して1つの選択から複数のモデル値を取得するにはどうすればよいですか?

分類Dev

Excelデータを日付でグループ化し、各日の最大レポート値を選択するにはどうすればよいですか?

分類Dev

同じテーブルの属性の一意の値を持つテーブルからレコードを選択するにはどうすればよいですか?oracle sqlplusに関して回答してください

分類Dev

モデルをDjangoに保存するたびに、モデルの属性に特定の値を設定するにはどうすればよいですか?

分類Dev

XSLT / XPATHを介して特定の値を選択し、その値を別のタグに使用するにはどうすればよいですか?

分類Dev

別の配列の値に基づいて、配列内の各ActiveRecordに新しい属性を追加するにはどうすればよいですか?

分類Dev

配列に重複を追加することを回避し、特定の属性に対して一度に1つの値しか持たないようにするにはどうすればよいですか?

分類Dev

別のものから選択して値を挿入するにはどうすればよいですか

分類Dev

jqueryを使用して特定の値を持つボタン要素を選択するにはどうすればよいですか?

分類Dev

同じ属性を持つ後続の行を選択するにはどうすればよいですか

分類Dev

2つの属性の値を取得して、別の属性に配置するにはどうすればよいですか?

分類Dev

別の属性がxに等しい属性値を取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    同じ値の属性を持つエッジを選択するにはどうすればよいですか

  2. 2

    jQueryで特定のデータ属性を持つ要素を選択するにはどうすればよいですか?価値は関係ありません

  3. 3

    HSQLの各グループの列に最大値を持つ行を選択するにはどうすればよいですか?

  4. 4

    特定の属性値を持つXDocumentから特定のノードを選択するにはどうすればよいですか?

  5. 5

    他の列の最大値を持つ列、および別のテーブルの列の対応するすべての行を選択するにはどうすればよいですか?

  6. 6

    各列の最大値に基づいて列を選択するにはどうすればよいですか?

  7. 7

    dplyrで各グループの最大値を持つ行を選択するにはどうすればよいですか?

  8. 8

    SQLの別のテーブルの別の値に対応するすべての値を選択するにはどうすればよいですか

  9. 9

    別の属性の値に基づいて最大数を選択するにはどうすればよいですか?

  10. 10

    [パンダ]:パンダの別の列要素の最大値に対応する特定の列要素を選択するにはどうすればよいですか?

  11. 11

    C#でgmlファイルを解析しながら特定の属性を持つ特定の要素を選択するにはどうすればよいですか?

  12. 12

    Access2016の別の列で最大値を持つ個別の行を選択するにはどうすればよいですか

  13. 13

    特定の基準に対して個別のペア値を選択するSQLクエリを作成するにはどうすればよいですか?

  14. 14

    SQL-特定の列内で最大値を持つデータ行を選択するにはどうすればよいですか?【バージョン2】

  15. 15

    srcset属性の値を選択して使用するにはどうすればよいですか?

  16. 16

    SQL 2008で特定の列値を持つ列を選択するにはどうすればよいですか?

  17. 17

    jQueryを使用して特定のARIA値を持つすべての要素を選択するにはどうすればよいですか?

  18. 18

    AngularJSを使用して1つの選択から複数のモデル値を取得するにはどうすればよいですか?

  19. 19

    Excelデータを日付でグループ化し、各日の最大レポート値を選択するにはどうすればよいですか?

  20. 20

    同じテーブルの属性の一意の値を持つテーブルからレコードを選択するにはどうすればよいですか?oracle sqlplusに関して回答してください

  21. 21

    モデルをDjangoに保存するたびに、モデルの属性に特定の値を設定するにはどうすればよいですか?

  22. 22

    XSLT / XPATHを介して特定の値を選択し、その値を別のタグに使用するにはどうすればよいですか?

  23. 23

    別の配列の値に基づいて、配列内の各ActiveRecordに新しい属性を追加するにはどうすればよいですか?

  24. 24

    配列に重複を追加することを回避し、特定の属性に対して一度に1つの値しか持たないようにするにはどうすればよいですか?

  25. 25

    別のものから選択して値を挿入するにはどうすればよいですか

  26. 26

    jqueryを使用して特定の値を持つボタン要素を選択するにはどうすればよいですか?

  27. 27

    同じ属性を持つ後続の行を選択するにはどうすればよいですか

  28. 28

    2つの属性の値を取得して、別の属性に配置するにはどうすればよいですか?

  29. 29

    別の属性がxに等しい属性値を取得するにはどうすればよいですか?

ホットタグ

アーカイブ