大量のデータを扱う場合、データベース操作の実行中に一意の情報を抽出することが必要になることがよくあります。このようなシナリオの 1 つは、各個別のユーザーの最新の訪問を識別することです。
質問:
DISTINCT ON を使用して各個別のユーザーの最新の訪問時間を取得しようとしているとき構文では、ActiveRecord::StatementInvalid エラーが発生します。使用したクエリは次のとおりです:
<code class="ruby">Event.order(time: :desc).select('DISTINCT ON(user_id) user_id, time')</code>
解決策:
DISTINCT ON 構文は PostgreSQL に固有であり、MySQL には適用されません。 ActiveRecord を使用して MySQL で望ましい結果を達成するには、クエリを変更する必要があります。
<code class="ruby">Events.group(:user_id).maximum(:time)</code>
出力:
この変更されたクエリは、期待される出力を生成します。キーは一意のユーザー ID を表し、値は最後にアクセスした時刻を表します:
{21=>Tue, 18 Dec 2018 11:15:24 UTC +00:00, 23=>Thu, 20 Dec 2018 06:42:10 UTC +00:00}
以上がActiveRecord を使用して MySQL の各一意のユーザーの最新の訪問時間を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。