Class: Lookout::Stats::AverageVisitDurationQuery
- Inherits:
-
BaseQuery
show all
- Defined in:
- app/queries/lookout/stats/average_visit_duration_query.rb
Instance Attribute Summary
#params
Class Method Summary
collapse
Instance Method Summary
collapse
#with_lazy_comparison
#with_comparison
call, inherited, #initialize, #inspect
Class Method Details
.cast_type(value) ⇒ Object
16
17
18
|
# File 'app/queries/lookout/stats/average_visit_duration_query.rb', line 16
def self.cast_type(value)
ActiveRecord::Type.lookup(:string)
end
|
.cast_value(_type, value) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'app/queries/lookout/stats/average_visit_duration_query.rb', line 20
def self.cast_value(_type, value)
if value.present?
if value.is_a?(Numeric) || value.to_s.match?(/^\d+(\.\d+)?$/)
value.to_f.seconds
else
ActiveSupport::Duration.parse(value)
end
else
0.seconds
end
end
|
Instance Method Details
#build ⇒ Object
4
5
6
7
8
9
10
11
12
13
14
|
# File 'app/queries/lookout/stats/average_visit_duration_query.rb', line 4
def build
max_events = event_query.select("#{Lookout.event.table_name}.visit_id, max(#{Lookout.event.table_name}.time) as created_at").group("visit_id")
duration_cast = Lookout::DatabaseAdapter.postgresql? ?
"avg((max_events.created_at - #{Lookout.visit.table_name}.started_at))::interval" :
"avg(julianday(max_events.created_at) - julianday(#{Lookout.visit.table_name}.started_at)) * 86400"
visit_query.select("#{duration_cast} as average_visit_duration")
.joins("LEFT JOIN (#{max_events.to_sql}) as max_events ON #{Lookout.visit.table_name}.id = max_events.visit_id")
end
|