计算AVG DIFF btw时间戳由其他字段组合?

时间:2016-04-18 16:41:56

标签: sql postgresql

我有一个“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触发器]< [当前时间 - 最后一次触发]。我的逻辑如下:

  1. 使用LAG类型f(x)生成“prev_triggered_at”字段;
  2. 找到“triggered_at”和“prev_triggered_at”字段之间的AVG时差;
  3. 生成此avg<的区域列表。 [当前时间 - 最后一次ping]
  4. 有关如何编写此查询的任何建议?

1 个答案:

答案 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子句的语句,因为您将所有信息都放在同一行。