• 締切済み

Sqlite3で時間毎に集計を出したいとき

sqlite3のcreated_atに下記(1)の日時が入っているとします。 (2)のように時間ごとにレコード数をカウントしたい場合、 どのようなSQLを記述したら良いのでしょうか rubyからsqliteへアクセスしようとしているのですが、 sqliteはdatetime型持てず、text型になるなど、いろいろな情報が出てきて混乱しています。 (1)created_at 2012/01/01 01:01:00 2012/01/01 01:02:00 2012/01/01 01:03:00 2012/01/01 02:01:00 2012/01/01 03:01:00 2012/01/01 04:01:00 (2) datetimehour countnum 2012/01/01 01:00:00 3 2012/01/01 02:00:00 1 2012/01/01 03:00:00 1 2012/01/01 04:00:00 1 どうぞよろしくお願いいたします。

みんなの回答

  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

どうも最近のsqlite3はdatetime型が使える様です。そのような記述を見かけます。 activerecordを使って書いてみました。 空のdata.sqliteファイルを作っておけばテストできます。 これではTime classが返ってきます。 require 'rubygems' require 'active_record' ActiveRecord::Base.establish_connection( :adapter => "sqlite3", :database => "data.sqlite" ) class Test < ActiveRecord::Base end # table作成 class CreateTest < ActiveRecord::Migration create_table "tests" do |t| t.string :title t.datetime :date_and_time end end # 書き込み tt=Test.new(:title=>"now1", :date_and_time=>Time.now) tt.save time1=Time.local(2012, 1, 1, 1, 0, 0, 0) tt=Test.new(:title=>"time1", :date_and_time=>time1) tt.save require "date" tt=Test.new(:title=>"now2", :date_and_time=>DateTime.now) tt.save time2="2012-04-01 10:59:59" tt=Test.new(:title=>"time2", :date_and_time=>DateTime.parse(time2)) tt.save #読み込み Test.find_each{|a| p a p a.date_and_time p a.date_and_time.class }

関連するQ&A