sql >> Databáze >  >> RDS >> PostgreSQL

Implementace blokovaných dat pro model ORM uživatelských událostí

Zde je řešení, které jsem zvolil. Trik byl v použití left outer join (ruby příkaz eager_load) pro uživatele a tabulku blocked_date_periods a včetně těch uživatelů, jejichž pole počátečního_datu ve spojené tabulce má hodnotu NULL, očividně proto, že k sobě nemají přiřazeny žádné blokované objekty data. Dotaz, který používám:

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

Musel jsem přidat a odečíst 1 hodinu od počátečního a koncového data, protože dotaz z nějakého důvodu nechtěl zahrnovat přesná koncová data, takže 26. 12. 2015 nebyl zahrnut do období od 22. 12. 2015 do 16.12.2015 z nějakého důvodu, kterému ještě nerozumím.

Z nějakého důvodu se mi toto řešení nelíbí a rád bych věděl, zda existuje dotaz, který je lepší a rychlejší než ten, který mám já.




  1. Formátování čísel pomocí odsazení úvodními nulami v SQL Server

  2. Jak změním formát data v Postgres?

  3. Odstranit duplicitní řádky na základě pole ve výběrovém dotazu pomocí PostgreSQL?

  4. Pokus o získání hesla z databáze