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

Postgres Grup lambat berdasarkan kueri dengan maks

Yang Anda butuhkan adalah "lewati pemindaian" atau "pemindaian indeks longgar ". Planner PostgreSQL belum mengimplementasikannya secara otomatis, tetapi Anda dapat mengelabuinya untuk menggunakannya dengan menggunakan kueri rekursif.

WITH RECURSIVE  t AS (
SELECT min(eventtype) AS eventtype FROM allevents
           UNION ALL
SELECT (SELECT min(eventtype) as eventtype FROM allevents WHERE eventtype > t.eventtype)
   FROM t where t.eventtype is not null
)
select eventtype, (select max(eventtime) from allevents where eventtype=t.eventtype) from t;

Mungkin ada cara untuk menciutkan max(eventtime) ke dalam kueri rekursif daripada melakukannya di luar kueri itu, tetapi jika demikian, saya belum menemukannya.

Ini membutuhkan indeks (eventtype, eventtime) agar efisien. Anda dapat membuatnya menjadi DESC pada waktu acara, tetapi itu tidak perlu. Ini efisien hanya jika eventtype hanya memiliki beberapa nilai yang berbeda (21 di antaranya, dalam kasus Anda).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan tipe dasar array di postgres melalui jdbc

  2. Postgres JSONb ke XML dengan tag_name dan tag_value

  3. Bagaimana cara mengatasi kesalahan 'fe_sendauth:tidak ada kata sandi yang disediakan' di Rails menggunakan PostgreSQL?

  4. Django 1.8 Migrasi dengan Postgres BDR 9.4.1

  5. Apa sebenarnya operator untuk membandingkan antara `bigint` dan `date` di postgresql?