PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kembalikan baris yang maksimal satu kolom di Postgresql

Postgres mendukung fungsi jendela yang sesuai dengan situasi ini:

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

Untuk setiap kombinasi date , symbol , kueri ini mengembalikan value dan created_time dari baris dengan yang tertinggi (yaitu terakhir ) created_time dari date itu dan symbol .

Saya akan menyarankan indeks ini:

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

Ini adalah penutup index (memiliki semua nilai yang Anda perlukan untuk kueri, meniadakan kebutuhan untuk mengakses tabel yang sebenarnya, dan yang sudah Anda miliki), tetapi perhatikan bahwa created_time datang sebelum value , jadi data sudah dalam urutan partisinya, dan value adalah atribut yang paling tidak penting, karena tidak berpartisipasi dalam penentuan baris mana yang akan dikembalikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. regexp_replace Unicode di PostgreSQL

  2. Bagaimana cara menanyakan nilai yang memiliki jumlah suara tertinggi dan tidak ada tanda di PostgreSQL?

  3. Kompilasi PL/Proxy dengan PostgresPlus Advance Server 9.1

  4. CURRENT_TIMESTAMP dalam milidetik

  5. Bidang gabungan CTE rekursif dengan orang tua dari titik sewenang-wenang