Sql 计算按其他字段分组的平均差异btw时间戳?

Sql 计算按其他字段分组的平均差异btw时间戳?,sql,postgresql,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:

我有一个“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
我试图构建逻辑,通过确定[avg.time difference between triggers]并生成[avg.time difference btw]触发的所有区域的列表来估计信标(区域)是否已停止生成数据。我的逻辑如下:

  • 使用滞后类型f(x)生成“prev_triggered_at”字段
  • 查找“触发时间”和“上一次触发时间”字段之间的平均时间差
  • 生成此平均值<[当前时间-上次ping]的区域列表

  • 关于如何编写此查询有什么建议吗

    我建议你去尝试诱惑,让你的生活更轻松,一步一步地做你需要的事情。 对于每个步骤,添加一列以加入计算或从查询中提取。e、 g.上一次触发的时间、平均值、差异等

    步骤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列添加到Tentable中,并使用AVG()函数计算所需的平均值。我会提供查询,但我不确定我是否从您提供的信息中得到正确答案

    步骤3:选择带有where子句的语句,正如您所描述的,因为您的所有信息都在同一行中