sql >> Databasteknik >  >> RDS >> PostgreSQL

Implementering av blockerade datum för en ORM-modell för användarhändelser

Här är lösningen jag valde. Tricket var att använda left outer join (ruby-kommando eager_load) för användare och blocked_date_periods-tabellen, och inklusive de användare vars start_date-fält i den sammanfogade tabellen är NULL, uppenbarligen för att de inte har några blockerade datumobjekt kopplade till sig själva. Frågan jag använder:

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

Jag var tvungen att lägga till och subtrahera 1 timme från start- och slutdatumet eftersom frågan av någon anledning inte ville omfatta exakta slutdatum, så att 2015-12-26 inte ingick i perioden från 2015-22-12 till 2015-12-16 av någon anledning ska jag ännu inte förstå.

Av någon anledning gillar jag inte den lösningen och skulle vilja veta om det finns en fråga som är bättre och snabbare än vad jag har.




  1. Hur man får poster från de senaste 7 dagarna i MySQL

  2. En lösning för:Markörer stöds inte i en tabell som har ett klustrat kolumnlagerindex

  3. Infogar data i PostgreSQL jsonb-kolumnen med Daper.Net och NPGSQL

  4. MySQL GROUP BY och COUNT