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

Implementasi tanggal yang diblokir untuk model ORM peristiwa pengguna

Inilah solusi yang saya pilih. Triknya menggunakan left outer join (perintah ruby ​​bersemangat_load) untuk pengguna dan tabel block_date_periods, dan termasuk pengguna yang bidang tanggal_mulai dalam tabel yang digabungkan adalah NULL, jelas karena mereka tidak memiliki objek tanggal yang diblokir yang terkait dengan diri mereka sendiri. Kueri yang saya gunakan:

User.eager_load(:blocked_date_periods).
  where("blocked_date_periods.start_date is null OR 
    not tsrange(
      blocked_date_periods.start_date - '00:59:59'::interval,
      blocked_date_periods.end_date + '00:59:59'::interval
    ) @> ?::timestamp", 
  Date.parse(DATE_STRING)).count

Saya harus menambah dan mengurangi 1 jam dari tanggal mulai dan akhir karena kueri tidak ingin mencakup tanggal akhir yang tepat karena beberapa alasan, sehingga 26-12-2015 tidak termasuk dalam periode dari 12-22-2015 hingga 16-12-2015 untuk beberapa alasan saya belum mengerti.

Untuk beberapa alasan saya tidak menyukai solusi itu dan ingin tahu apakah ada kueri yang lebih baik dan lebih cepat dari yang saya miliki.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cegah drop table jika kondisi tidak terpenuhi

  2. Perbaikan Partisi di PostgreSQL 11

  3. Bagaimana cara memeriksa fungsi mana yang menggunakan tipe?

  4. panggilan fungsi agregat postgres mungkin tidak bersarang

  5. Nilai unik PostgreSQL di beberapa kolom