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

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

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

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

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

Q&A

2回答

2597閲覧

一時間毎のデータを集計するロジックをcontrollerに実装したいのですが、gropとかを用いてやっていても上手くいかず困ってます。

kento2543

総合スコア163

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

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

0グッド

2クリップ

投稿2016/05/29 15:01

編集2016/05/29 15:26

Postというモデルがあり、

1時間あたりに何回投稿されたかを管理画面で見る機能を実装してます。

投稿日時(created_at)をもとに、何回投稿されたかを判断します。

gropなどで集計する方法を探しており、以下のような記事は見つかったのですが、
同じようにやっても上手く行きませんでした。

http://qiita.com/onody/items/0bf5e0749eccd04891b0

http://www.workabroad.jp/posts/2184

どなたかご教授いただけないでしょうか?

最終的に期待する形

時間 投稿回数
00時 30回
01時 20回



23時 2回

今回やっていたコード

Australia/Sydney
はTokyoにすべきなのかと思いますが、サンプルコードと同じくAustralia/Sydneyにしました。

Post.group("date_part('hour', timezone('Australia/Sydney', posts.created_at))").count (0.7ms) SELECT COUNT(*) AS count_all, date_part('hour', timezone('Australia/Sydney', posts.created_at)) AS date_part_hour_timezone_australia_sydney_posts_created_at FROM `posts` GROUP BY date_part('hour', timezone('Australia/Sydney', posts.created_at)) Mysql2::Error: FUNCTION hogehoge_development.date_part does not exist: SELECT COUNT(*) AS count_all, date_part('hour', timezone('Australia/Sydney', posts.created_at)) AS date_part_hour_timezone_australia_sydney_posts_created_at FROM `posts` GROUP BY date_part('hour', timezone('Australia/Sydney', posts.created_at)) ActiveRecord::StatementInvalid: Mysql2::Error: FUNCTION hogehoge_development.date_part does not exist: SELECT COUNT(*) AS count_all, date_part('hour', timezone('Australia/Sydney', posts.created_at)) AS date_part_hour_timezone_australia_sydney_posts_created_at FROM `posts` GROUP BY date_part('hour', timezone('Australia/Sydney', posts.created_at))

このエラー内容がよくわかりませんでした。
Mysql2::Error: FUNCTION hogehoge_development.date_part does not exist

サンプルコードに添って実装したつもりだったんですが・・・。

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

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

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

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

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

oskbt

2016/05/29 15:12

どのようなプログラムを書いて、そしてどのようにうまくいかなかったか(エラーメッセージや意図しない結果とか)を書かないとアドバイスのしようもないと思います。
kento2543

2016/05/29 15:25

確かにそうですね。大変失礼しました。 先程、コードを追加しました。よろしくお願いします。
guest

回答2

0

いっそのこと、モデルに「投稿集計グループ:値はyyyymmddhh」みたいなものを追加しておいて、それをキーにして集計をするようにしては?

投稿2016/05/29 19:06

dojikko

総合スコア3939

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

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

kento2543

2016/05/30 04:05

ご回答ありがとうございます。 モデルに「投稿集計グループ」を追加というのはどういうことでしょうか? このモデルというのはPostモデルで 「投稿集計グループ」を追加というのはメソッドで定義するということでしょうか? 仮にそうだとしても、「それをキーにして集計」という部分がちょっとわかりませんでした。
guest

0

MySQLにはdate_partなんて便利な関数はないです。
参考資料とされているhttp://www.workabroad.jp/posts/2184ではPostgreSQLです。
データベースをPostgreSQLに変えるか他のやり方を考えないとダメですね。

投稿2016/05/29 15:42

oskbt

総合スコア1895

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

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

kento2543

2016/05/29 16:06

PostgreSQLだったんですね。失念しておりました。 もう一つの記事の方を改良して Post.group("HOUR(date)").sum(:column) というのも試したのですが、ダメでした。 こちらも、DBの種類による問題なのでしょうか? MySQLで、かつ、Railsで表題の実装をしたいのですが、どのようにやるのがいいでしょうか?
oskbt

2016/05/29 16:32

多分dateじゃなくてtimeになるのではないかと。それと、これには時間帯しか条件がないので、別の日の同じ時間帯のデータも同じグループになってしまいます。ですので、1日の正確な数字を出すなら、追加条件で日別に分けないとダメですね。 あとそのもう一つの記事のところのコメントに良さそうなのが紹介されていました。こちらはどうでしょうか? https://github.com/radar/by_star
kento2543

2016/05/30 04:03

ありがとうございます。再度試してみます。 またこちらですが https://github.com/radar/by_star mongodbじゃないとできないのかと諦めていたのですが、 MySQLでやっていても、できるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問