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

Urutan pengurutan deterministik untuk fungsi jendela

Jika Anda tidak memiliki slno di tabel Anda, maka Anda tidak memiliki informasi yang dapat dipercaya baris mana yang dimasukkan terlebih dahulu. Tidak ada urutan alami dalam tabel, urutan fisik baris dapat berubah kapan saja (dengan pembaruan apa pun, atau dengan VACUUM , dll.)

Anda bisa gunakan tidak dapat diandalkan trik:pesan dengan ctid internal .

select *
from  (
   select id, status
        , row_number() OVER (PARTITION BY id
                             ORDER BY date, ctid) AS row_num
   from   status  -- that's your table name??
   where  date >= '2015-06-01'  -- assuming column is actually a date
   and    date <  '2015-07-01'
  ) sub
where  row_num = 1;
  • Jika tidak ada informasi lain, baris mana yang lebih dulu (yang merupakan kesalahan desain untuk memulai, perbaiki!), Anda dapat mencoba menyimpan apa yang Anda bisa menggunakan ID tupel ctid

    Baris akan berada dalam urutan fisik saat dimasukkan pada awalnya, tetapi itu dapat berubah kapan saja dengan operasi tulis apa pun ke tabel atau VACUUM atau acara lainnya.
    Ini adalah langkah terakhir dan akan istirahat.

  • Kueri yang Anda sajikan tidak valid dalam beberapa hal:nama kolom tidak ada di CTE pertama, nama tabel tidak ada di CTE ke-2, ...

  • Anda tidak memerlukan CTE untuk ini.

Lebih sederhana dengan DISTINCT ON (pertimbangan untuk ctid berlaku sama):

SELECT DISTINCT ON (id)
       id, status
FROM   status
WHERE  date >= '2015-06-01'
AND    date <  '2015-07-01'
ORDER  BY id, date, ctid;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kompilasi PL/Proxy dengan PostgresPlus Advance Server 9.1

  2. Saya mencoba menginstal psycopg2 ke Mac OS 10.6.3; ia mengklaim tidak dapat menemukan stdarg.h tetapi saya dapat melihatnya di sana; apa yang harus saya lakukan?

  3. Postgres tidak dapat mendengarkan alamat IP tertentu

  4. Bagaimana cara menanyakan array jsonb dengan operator IN

  5. Aktifkan FIPS di database PostgreSQL