Rails ActiveRecordで特定のカラムのユニークな配列を取得する

例えば created_on に日付が入っているこんなデータ

Post.last
  Post Load (13.1ms)  SELECT  "posts".* FROM "posts"
=> #<Post id: 1, user_id: 1, created_on: "2020-11-02">

pluck を使うだけだと同じ日付が入ってしまう

Post.pluck(:created_on)
   (2.7ms)  SELECT "posts"."created_on" FROM "posts"
=> [Mon, 02 Nov 2020, Mon, 02 Nov 2020, ...]

uniq すると一意の日付だけになる

Post.pluck(:created_on).uniq
   (2.7ms)  SELECT "posts"."created_on" FROM "posts"
=> [Mon, 02 Nov 2020, Tue, 03 Nov 2020, Sat, 26 Sep 2020,

このままでもいいが posts のレコード数が多すぎるとその分の配列を uniq することになるのでアプリケーション側に負荷がかかる可能性があるのでDB側にやらせる

select distinct を使う

Post.select(:created_on).distinct.pluck(:created_on)
   (2.0ms)  SELECT DISTINCT "posts"."created_on" FROM "posts"
=> [Tue, 01 Sep 2020, Wed, 02 Sep 2020, Thu, 03 Sep 2020, Fri, 04 Sep 2020, ...

これでハッピー

Redash全体が重い遅いときは自動更新頻度が原因かも

タイトルママなんですが
Redashクエリではなくサイト自体の読み込みが遅く困っていました。
Refresh ScheduleEvery 5 minutes が増えていることに気づき、
更新頻度を減らしたところ軽くなりRedashに平和が訪れました。

f:id:kuronekopunk:20201030225310p:plain

自動更新は計画的に。

また、古いクエリが永遠に自動更新されていることもあるので無駄なクエリの掃除や自動更新の終了期限を設定するのをお忘れなく👌

スプレッドシートでEOMONTHを使い月初、月末を取得する

EOMONTH 関数を使う
たぶん end of month だろう

関数リストから月末で検索しても出なかったけど「最終日」って言うのか…

起算日から指定した月数だけ前または後ろの月の最終日の日付を返します。 EOMONTH(開始日, 月数)

support.google.com

月末

月数に0を渡せば当月末になる

=EOMONTH(日付, 0)

月初

前月末+1で当月初になる

=EOMONTH(日付, -1) + 1

余談

時々、1ヶ月・1日毎や連番を作ろうとして

=隣のセル+1

とやっているのを見るけどその場合は系列リストの自動生成(範囲選択して伸ばすやつ)をしようね 法則があれば週次の日付も出せるし便利

1/7, 1/14 → 引き伸ばすと1週間毎の日付が出る

support.google.com

これとかわかりやすい

オートフィルで数字や日付などの連続データを入力する|スプレッドシートの使い方