質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

2694閲覧

railsでの年月(yyyymm)データの条件の指定方法について

koichi8888

総合スコア24

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2018/06/14 02:49

前提・実現したいこと

データの登録年月が格納されているカラム(created_at)に対して、特定の年月(yyyymm)のデータの数を取得したいのですが、条件に指定する年月の記載方法が分からず、質問させて頂ました。

※データの数を取得する目的としては年月ごとにデータにシーケンス番号を振りたいためです。(※データの数を取得し、それに1をプラスしていく処理)

該当のソースコード

Ruby

1[9] pry(main)> GyomuDatum.group(:created_at).count 2 (1.2ms) SELECT COUNT(*) AS count_all, `gyomu_data`.`created_at` AS gyomu_data_created_at FROM `gyomu_data` GROUP BY `gyomu_data`.`created_at` 3=> {Thu, 31 May 2018 17:40:14 JST +09:00=>23, 4 Wed, 13 Jun 2018 17:13:32 JST +09:00=>1, 5 Wed, 13 Jun 2018 17:15:51 JST +09:00=>1, 6 Wed, 13 Jun 2018 17:21:08 JST +09:00=>1, 7 Wed, 13 Jun 2018 17:21:33 JST +09:00=>1, 8 Wed, 13 Jun 2018 17:22:26 JST +09:00=>1, 9 Wed, 13 Jun 2018 17:22:55 JST +09:00=>1, 10 Wed, 13 Jun 2018 17:29:02 JST +09:00=>1, 11 Wed, 13 Jun 2018 17:29:31 JST +09:00=>1, 12 Wed, 13 Jun 2018 17:32:11 JST +09:00=>1, 13 Wed, 13 Jun 2018 17:37:31 JST +09:00=>1, 14 Wed, 13 Jun 2018 18:00:54 JST +09:00=>1, 15 Wed, 13 Jun 2018 19:01:49 JST +09:00=>1, 16 Wed, 13 Jun 2018 19:03:21 JST +09:00=>1, 17 Thu, 14 Jun 2018 10:34:56 JST +09:00=>1} 18[12] pry(main)> GyomuDatum.where(created_at: 201806*).count 19SyntaxError: unexpected ')' 20GyomuDatum.where(created_at: 201806*).count

補足情報(FW/ツールのバージョンなど)

・Rails
Rails 4.2.10

・Mysql
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ちょっと冗長かもですが次のようなクエリでどうでしょう。

ruby

1GyomuDatum 2.where('created_at >= ?', Time.local(2018, 6, 1)) 3.where('created_at <= ?', Time.local(2018, 6, 1).end_of_month) 4.count

このような SQL が発行されます。

sql

1SELECT COUNT(*) FROM `GyomuDatum` WHERE (created_at >= '2018-06-01 00:00:00') AND (created_at <= '2018-06-30 23:59:59.999999')

(もしタイムゾーンの設定が違う場合などは工夫が必要かもしれません)

投稿2018/06/14 13:58

ryochin

総合スコア280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koichi8888

2018/06/15 04:24

ご回答ありがとうございます。教えて頂いた内容で動作しました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問