26 lines
505 B
Ruby
26 lines
505 B
Ruby
|
|
# frozen_string_literal: true
|
||
|
|
|
||
|
|
require "bucket"
|
||
|
|
require "db"
|
||
|
|
require "rate_scopes"
|
||
|
|
|
||
|
|
class Rate < Sequel::Model(:rates)
|
||
|
|
include RateScopes
|
||
|
|
|
||
|
|
class << self
|
||
|
|
def date_column = :date
|
||
|
|
end
|
||
|
|
|
||
|
|
dataset_module do
|
||
|
|
def downsample(precision)
|
||
|
|
sampler = Bucket.expression(precision)
|
||
|
|
|
||
|
|
select(:base, :provider, :quote)
|
||
|
|
.select_append { avg(rate).as(rate) }
|
||
|
|
.select_append(sampler.as(:date))
|
||
|
|
.group(:base, :provider, :quote, sampler)
|
||
|
|
.order(:date)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|