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

Pengelompokan berdasarkan tanggal, dengan 0 saat count() tidak menghasilkan garis

Mengingat Anda tidak memiliki tanggal dalam tabel, Anda memerlukan cara untuk membuatnya. Anda dapat menggunakan generate_series fungsi:

SELECT * FROM generate_series('2012-01-01'::timestamp, '2012-01-07 23:00', '1 hour') AS ts;

Ini akan menghasilkan hasil seperti ini:

         ts          
---------------------
 2012-01-01 00:00:00
 2012-01-01 01:00:00
 2012-01-01 02:00:00
 2012-01-01 03:00:00
...
 2012-01-07 21:00:00
 2012-01-07 22:00:00
 2012-01-07 23:00:00
(168 rows)

Tugas selanjutnya adalah menggabungkan dua pilihan menggunakan gabungan luar seperti ini :

select extract ( day from ts ) as day, extract ( hour from ts ) as hour,coalesce(count,0) as count from 
(
    SELECT  extract ( day from date ) as day , extract ( hour from date ) as hr ,count(*)
    FROM    sr
    where date>'2012-01-01' and date <'2012-01-07'
    GROUP BY   extract ( day from date ) , extract ( hour from date )
) AS cnt 
 right outer join ( SELECT * FROM generate_series ( '2012-01-01'::timestamp, '2012-01-07 23:00', '1 hour') AS ts ) as dtetable on extract ( hour from ts ) = cnt.hr and extract ( day from ts ) = cnt.day 
 order by day,hour asc;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Query PostgreSQL dengan Npgsql dan Entity Framework menggunakan unaccent

  2. Basis data Postgres yang berjalan di buruh pelabuhan terus menggantung

  3. JPA menghasilkan kunci duplikat

  4. Bagaimana saya bisa mendengarkan database postgresql dengan SignalR Core di .net core project?

  5. Mengapa saya mendapatkan kesalahan kunci duplikat saat memperbarui baris?