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時間を加算および減算する必要がありました。そのため、2015年12月22日から2015年12月22日までの期間には2015年12月26日が含まれませんでした。 2015年12月16日何らかの理由で私はまだ理解していません。

    何らかの理由で私はその解決策が好きではなく、私が持っているものよりも優れていて速いクエリがあるかどうか知りたいです。




    1. HikariCP接続が多すぎます

    2. MYSQL5.5ドロッププライマリキー

    3. 一連の更新の最後にトリガーを起動するにはどうすればよいですか?

    4. MySQL:列のテキストの長さを取得する方法