【问题标题】:Difference between current and previous timestamp当前时间戳和上一个时间戳之间的差异
【发布时间】:2014-03-05 03:25:18
【问题描述】:

我有一个表格,其中的数据每 5 分钟更新一次。

| TimeStamp | Data |
|   1       |    2 |
|   2       |    8 |
|   3       |   16 |

我怎样才能选择这个数据,它不显示数据,但最后一个时间戳之间的差异,像这样:

| TimeStamp | Data |
|   1       |    2 |
|   2       |    6 |
|   3       |    8 |

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果戈登设想的场景实现,那么你可以做这样的事情......

    SELECT x.timestamp
         , x.data-COALESCE(MAX(y.data),0) data 
      FROM my_table x 
      LEFT 
      JOIN my_table y 
        ON y.timestamp < x.timestamp 
     GROUP 
        BY x.timestamp;
    

    【讨论】:

    • 有缝隙的时候好像有问题。如果我得到一段时间的 0 数据,我最终会得到负数据和关闭数字。关于如何解决这个问题的任何建议?
    • 我建议你发布一个 sqlfiddle 来演示这个问题。
    【解决方案2】:

    如果您的时间戳没有间隔(如问题中的示例所示):

    select t.timestampe,
           t.data - coalesce(tprev.data, 0) as data
    from table t left outer join
         table tprev
         on t.timestamp = tprev.timestemp + 1;
    

    如果你有差距,这可能无法按你想要的方式工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多