【问题标题】:Calculating AVG DIFF btw timestamps GROUPED BY other field?计算由另一个字段分组的时间戳之间的平均差异?
【发布时间】:2016-04-18 16:41:55
【问题描述】:

我有一个“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.触发器之间的时间差],然后生成 [avg.时间差 btw triggers]

  1. 使用 LAG 类型 f(x) 生成“prev_triggered_at”字段;
  2. 找出“triggered_at”和“prev_triggered_at”字段之间的 AVG 时间差;
  3. 生成此平均值

关于如何编写此查询的任何建议?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    我会建议在 temptable 上工作,让你的生活更轻松,一步一步做任何你需要的事情。 对于每个步骤,添加一列以进行计算或从查询中提取。例如prev_triggered_at , AVG,Diff 等

    Step1:使用以下脚本:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2014-09-24
      相关资源
      最近更新 更多