PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Внедряване на блокирани дати за ORM модел на потребителско събитие

Ето решението, което избрах. Номерът беше в използването на left outer join (ruby команда eager_load) за потребители и таблица blocked_date_periods и включително онези потребители, чието поле start_date в обединената таблица е NULL, очевидно защото нямат блокирани обекти за дата, свързани със себе си. Заявката, която използвам:

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

Трябваше да добавя и изваждам 1 час от началната и крайната дата, защото заявката не искаше да обхване точните крайни дати по някаква причина, така че 26.12.2015 г. не беше включена в периода от 22.12.2015 г. до 16-12-2015 по някаква причина, която все още не разбирам.

По някаква причина не харесвам това решение и бих искал да знам дали има заявка, която е по-добра и по-бърза от това, което имам.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на въведени резултати от необработен SQL ActiveRecord

  2. Присвояване на същия идентификатор на редове с една и съща комбинация от данни

  3. Подаване на име на таблица като параметър в psycopg2

  4. Нуждаете се от обяснение за типовете символи в PostgreSQL

  5. Агрегирана функция на PostgreSQL в обхват