sql >> データベース >  >> RDS >> PostgreSQL

Ruby on Rails/ActiveRecord用のエレガントなPostgreSQLグループ

    ここで使用するPostgreSQLの機能は、 DISTINCT ON 。 ActiveRecordを介してこのクエリを実行するには、2つの基本的な方法があります。

    最初の方法は、:selectを指定することです。 および:order オプション。これは、:joinsのない非常に単純なクエリがある場合に最適です。 または:include

    Post.all(
      :select => 'DISTINCT ON (date::date) *',
      :order => 'date::date DESC, created_at DESC'
    )
    

    ActiveRecordが独自のSELECTを生成するより複雑なクエリがある場合 句を使用すると、サブクエリを使用してターゲットレコードを選択できます。

    Post.all(
      :joins => 'INNER JOIN (SELECT DISTINCT ON (date::date) id FROM posts ORDER BY date::date DESC, created_at DESC) x ON x.id = posts.id'
    )
    

    データによっては、これは最初の方法よりもかなり遅くなる可能性があることに注意してください。この方法は、必要な場合にのみ使用します。必ず本番環境のようなデータでベンチマークを行ってください。



    1. MySqlクエリの結果は1日中

    2. MySQLQUERYLIKEは何も返しません

    3. エラーの取得:「SERVER_IP」でMySQLサーバーに接続できません(99)

    4. 時間範囲の時間内にグループ化されたギャップをカウントする