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

Postgresqlで最大1列の行を返します

    Postgresはウィンドウ関数 をサポートしています この状況に適しています:

    select date, symbol, value, created_time
    from (select *,
        rank() over (partition by date, symbol order by created_time desc) as rownum
      from test_table) x
    where rownum = 1
    

    dateのすべての組み合わせに対して 、 symbol 、このクエリは valueを返します およびcreated_time 最高の行から(つまり、最後 created_time その日付の およびsymbol

    このインデックスをお勧めします:

    CREATE UNIQUE INDEX test_table_idx 
      ON test_table (date, symbol, created_time, value)
    

    カバーです インデックス(クエリに必要なすべての値があり、実際のテーブルにアクセスする必要がなく、すでに持っています)が、 created_timeに注意してください。 に来る 、したがって、データはすでにパーティション順であり、 value は、どの行を返すかの決定には関与しないため、最も重要度の低い属性です。



    1. OracleでORDERBY関数が機能しない

    2. ORA-00904デコード・エイリアスの識別子が無効です

    3. データベース内の画像が自分のサイトに投稿されていません(PHP MySQL)

    4. SQLSTATE[HY000][1045]ユーザー'root'@'localhost'のアクセスが拒否されました(パスワードを使用:YES)symfony2