我有一个“track_events”表,它以下列格式跟踪ping到信标(区域):
id region triggered_at
1234 abc 2016-03-04 21:07:18.817+00
1235 def 2016-03-04 22:04:11.817+00
1236 abc 2016-03-05 01:21:43.817+00
1237 def 2016-03-05 07:44:43.817+00
1238 abc 2016-03-05 11:34:45.817+00
1238 ghi 2016-03-05 14:09:55.817+00
1238 abc 2016-03-06 02:12:10.817+00
我正在尝试构建逻辑来估计信标(区域)是否已通过确定[平均值]来停止生成数据。触发器之间的时间差]然后生成[平均值]的所有区域的列表。时差btw触发器]< [当前时间 - 最后一次触发]。我的逻辑如下:
有关如何编写此查询的任何建议?
答案 0 :(得分:0)
我建议你努力工作,让你的生活更轻松,一步一步做你需要做的事。 对于每个步骤,添加一列以投入计算或从查询中提取。例如prev_triggered_at,AVG,Diff等。
步骤1:使用以下脚本:
select a.id, a.region, a.triggered_at
, max(b.triggered_at) as prev_triggered_at
from track_events a
inner join track_events b
on a.region=b.region
and a.triggered_at>b.triggered_at
group by a.id,a.region,a.triggered_at
步骤2:只需将AVG列添加到temptable并使用avg()函数计算所需的平均值。我会提供查询,但我不确定我是否从您提供的信息中做到了。
步骤3:选择带有where子句的语句,因为您将所有信息都放在同一行。