Dataset#max
日付とタイムスタンプの列 (を使用しますDB[:data].max(:timestamp)
が、タイムスタンプや日付ではなく、結果として文字列を取得します。
例:
require 'sequel'
DB = Sequel.sqlite()
#~ DB.use_timestamp_timezones = true #no effect
DB.create_table(:data){
Fixnum :num
timestamp :timestamp
Date :date
} unless DB.table_exists?(:data)
#Insert some testdata
1.upto(10){|i|
DB[:data].insert(i, Time.now - 24*60*60*i, Date.today - i)
}
#
#my self written max function.
#
def max(ds,field)
timestamp = nil
ds.select(field).each{|ds|
timestamp = ds[field] if ! timestamp or timestamp < ds[field]
}
timestamp
end
##Ok
p max(DB[:data],:num)
p DB[:data].max(:num) #ok
p max(DB[:data],:timestamp) #timestamp -> ok
p DB[:data].max(:timestamp) #String!!
p max(DB[:data],:date) #date -> ok
p DB[:data].max(:date) #String!!
データが本当にタイムスタンプ/日付である場合、クロスチェックを行いました。これは問題ないようです:
##Crosscheck:
DB[:data].each{|ds|
puts "Error" unless ds[:timestamp].is_a?(Time)
puts "Error" unless ds[:date].is_a?(Date)
puts "Error" unless ds[:num].is_a?(Fixnum)
}
Time#parse
タイムスタンプを再度取得するために使用できます。
p Time.parse(DB[:data].max(:timestamp))
しかし、同じタイプで最大値を取得したいと思います。
タイムスタンプ/日付として最大結果を取得する方法はありますか?