2017-11-27 7 views
1

重複レコードを返す私はskipped_play_idに基づいて、すべてのデータを選択するには、いくつかのクエリをしましたが、私は、それはまだいくつかの重複skipped_play_idRailsのグループはまだ

user = User.first  
skipped_plays=user.user_skipped_plays.select(:skipped_play_id,:created_at).group(:created_at,:skipped_play_id) 

、なぜ私は:created_atを提供する必要がありますを返すクエリを実行していたときに私はskipped_play_idでグループ化されたクエリが必要な場合は、引数でグループの1つとして。私はuser.user_skipped_plays.select(:skipped_play_id,:created_at).group(:skipped_play_id)

に私のクエリを変更した場合、それは

ActiveRecord::StatementInvalid: PG::GroupingError: ERROR: column "user_skipped_plays.created_at" must appear in the GROUP BY clause or be used in an aggregate function 
LINE 1: SELECT "user_skipped_plays"."skipped_play_id", "user_skippe... 
                 ^
: SELECT "user_skipped_plays"."skipped_play_id", "user_skipped_plays"."created_at" FROM "user_skipped_plays" WHERE "user_skipped_plays"."user_id" = $1 GROUP BY "user_skipped_plays"."skipped_play_id" ORDER BY "user_skipped_plays"."id" ASC LIMIT $2 
from /Users/fourtyonestudio/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:657:in `prepare 

を返します。私はどんなアドバイス

+0

あなたがして、グループ内のすべての選択したフィールドを定義する必要があります。 groupで定義するよりも 'created_at'を選択したようです。 – Vishal

+0

あなたは 'skipped_play_id'て欲しい、あなたは合計のいずれかのフィールドのカウントをしたいですか? – Vishal

+0

@Vishal iはちょうどテーブルから全データ 'skipped_play_id'を抽出する'テーブルスキーマをskipped_play_id'によってグループ化 'user_skipped_plays'は' UserSkippedPlay(IDである整数、のcreated_at:日時、updated_atの:日時、USER_ID:整数、skipped_play_id:整数) 'あなたは'によってグループ化され –

答えて

0

を本当に感謝します、私はあなたがすべてで、あなたのコード内のGROUP BYを必要としないと思います。あなただけのskipped_play_idとを含むユニークな行を選択する必要がある場合created_atあなたが行くことができます:

user.user_skipped_plays.select(:skipped_play_id, :created_at).uniq 

しかし、あなたが同じskipped_play_idが、異なるcreated_atと異なる行を持っている場合あなたが取るので、このような選択にあなたはまだ、skipped_play_idを重複してしまいます組み合わせ。だから、おそらく、一緒に行く必要があります:

user.user_skipped_plays.select(:skipped_play_id).uniq 

それはあなたが必要なものによって異なります。あなたはこの選択を使用する予定はどうすればよい私の答えのコメントを入力することができると私は

+0

ありがとう、それは仕事tho –

0

私はあなたが正しいデータかどうかを取得しているかどうかを知りましょう。この

User.first.user_skipped_plays.group_by { |t| t.skipped_play_id } 

を試してみてください、あなたの問題を解決するのに役立ちます

+0

あなたの助言をありがとう –

+0

@MuhammadRahmatullahそれは働きましたか? – Vishal

関連する問題