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

Generate_series di Postgres dari tanggal mulai dan akhir dalam sebuah tabel

Anda tidak memerlukan CTE untuk ini, itu akan lebih mahal dari yang diperlukan.
Dan Anda tidak perlu menggunakan timestamp , hasilnya sudah adalah tipe data timestamp saat Anda memberi makan timestamp ketik ke generate_series() . Detailnya di sini:

  • Membuat deret waktu antara dua tanggal di PostgreSQL

Di Postgres 9.3 atau nanti Anda dapat menggunakan LATERAL bergabung:

SELECT to_char(ts, 'YYYY-MM-DD HH24') AS formatted_ts
FROM  (
   SELECT min(start_timestamp) as first_date
        , max(start_timestamp) as last_date
   FROM   header_table
   ) h
  , generate_series(h.first_date, h.last_date, interval '1 hour') g(ts);

Opsional dengan to_char() untuk mendapatkan hasil sebagai teks dalam format yang Anda sebutkan.

Ini berfungsi di apa saja Versi Postgres:

SELECT generate_series(min(start_timestamp)
                     , max(start_timestamp)
                     , interval '1 hour') AS ts
FROM   header_table;

Biasanya sedikit lebih cepat.
Memanggil fungsi pengembalian set di SELECT list adalah fitur SQL non-standar dan disukai oleh beberapa orang. Juga, ada keanehan perilaku (meskipun tidak untuk kasus sederhana ini) yang akhirnya diperbaiki di Postgres 10. Lihat:

  • Apa perilaku yang diharapkan untuk beberapa fungsi pengembalian-set dalam klausa SELECT?

Catatan perbedaan halus dalam NULL penanganan:

Setara dengan

max(start_timestamp)

diperoleh dengan

ORDER BY start_timestamp DESC NULLS LAST
LIMIT 1

Tanpa NULLS LAST Nilai NULL datang lebih dulu dalam urutan menurun (jika ada bisa menjadi nilai NULL di start_timestamp ). Anda akan mendapatkan NULL untuk last_date dan kueri Anda akan kosong.

Detail:

  • Mengapa nilai NULL didahulukan saat memesan DESC dalam kueri PostgreSQL?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pembandingan Postgres-XL

  2. Pengaturan Multi Pusat Data Dengan PostgreSQL

  3. HikariCP - koneksi tidak tersedia

  4. Cara mengatur nilai bidang variabel komposit menggunakan SQL dinamis

  5. Ekstensi PostgreSQL Favorit Saya - Bagian Satu