質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

2482閲覧

【Rails】DISTINCTを利用して重複レコードを省いて取得することができません

ssk

総合スコア332

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/08/23 07:04

編集2021/08/23 07:07

以下のresult.pluck(:id)の結果は[1,2,3]でした。欲しい結果は[2,3]です。

教えていただきたいこと

  • 生のSQLではない方法で取得することはできますか?
  • また、なぜ以下では動かないのでしょう...?

テーブル

idcontract_number
110
220
310

試したこと

ruby

1# controller 2result = Model.select(<<~SQL) 3SELECT DISTINCT ON (contract_number) 4 id, contract_number 5FROM table_name 6ORDER BY id DESC; 7 SQL 8 9ids = result.pluck(:id) 10 11@q = Model.where(id: ids).ransack(params[:q])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/08/23 07:05

> 欲しい結果は[1,2]です。 [2,3]でなくて[1,2]でなければならない、というのは、どういう理由で決まるものでしょうか?
ssk

2021/08/23 07:08

申し訳ございません。修正いたしました。 欲しい結果は[2,3]になります。idの大きい順です。
guest

回答1

0

ベストアンサー

idの大きい順です。

でしたら、それを条件として集計を行えばいいだけの話です。

SQL

1SELECT contract_number, MAX(id) 2FROM table_name 3GROUP BY contract_number

ruby

1# {contract_number => id}のようなハッシュになるので、valuesで値だけ回収 2ids = Model.group(:contract_number).maximum(:id).values

投稿2021/08/23 07:11

maisumakun

総合スコア145930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/08/23 07:13

なお、DISTINCT ONはPostgres独自の制御のようです。
ssk

2021/08/23 07:33

とても簡潔に書くことができました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問