【问题标题】:mysql adding a new column to label the time-series data points for each idmysql添加一个新列来标记每个id的时间序列数据点
【发布时间】:2013-04-08 23:43:02
【问题描述】:

我将时间序列数据存储在一个表中,如下所示。

   id,       timestamp,             value
   d1   2000-01-01 00:00:00          1
   d1   2000-01-01 01:00:00          2
   d1   2000-01-01 02:00:00          3
   d1   2000-01-01 03:00:00          4
   d1   2000-01-01 04:00:00          5
...
   d2   2000-01-01 00:00:00          25
   d2   2000-01-01 01:00:00          26
   d2   2000-01-01 02:00:00          27
   d2   2000-01-01 03:00:00          28
   d2   2000-01-01 04:00:00          29
   d2   2000-01-01 05:00:00          30
...
   d3   2000-01-01 00:00:00          49
   d3   2000-01-01 01:00:00          50
   d3   2000-01-01 02:00:00          51
   d3   2000-01-01 03:00:00          52
   d3   2000-01-01 04:00:00          53

我需要做的是在表中添加另一列,如下所示。 目的是标记每个 id 的数据点数以供进一步处理。

  id,       timestamp,             value,     counter
   d1   2000-01-01 00:00:00          1           1 
   d1   2000-01-01 01:00:00          2           2
   d1   2000-01-01 02:00:00          3           3 
   d1   2000-01-01 03:00:00          4           4
   d1   2000-01-01 04:00:00          5           5
...
   d2   2000-01-01 00:00:00          25          1
   d2   2000-01-01 00:00:00          26          2
   d2   2000-01-01 01:00:00          27          3
   d2   2000-01-01 02:00:00          28          4 
   d2   2000-01-01 03:00:00          29          5
   d2   2000-01-01 04:00:00          30          6
...
   d3   2000-01-01 00:00:00          49          1
   d3   2000-01-01 01:00:00          50          2
   d3   2000-01-01 02:00:00          51          3
   d3   2000-01-01 03:00:00          52          4
   d3   2000-01-01 04:00:00          53          5

如何使用mysql命令实现? 谢谢。

【问题讨论】:

    标签: mysql time-series


    【解决方案1】:
    SELECT
    yt.*
    , IF(@prev=id, @counter:=@counter + 1, @counter:=1) as counter
    , @prev:=id
    FROM
    yourTable yt
    , (SELECT @counter:=0, @prev:=NULL) vars
    order by id, `timestamp`
    

    现场观看here

    【讨论】:

    • @user2258149 不客气。在这里说谢谢的通常方式是接受和/或赞成一个答案:)
    • 我做了,但是它需要 15 个声望点来支持答案。
    • 能否简单解释一下命令的后半部分? (SELECT counter:=0, prev:=NULL) 变量
    • 这只是为了在语句中动态初始化变量。 SET @counter:=0; SET @prev:=NULL; SELECT...FROM yourTable yt ORDER BY id, timestamp 也是如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2019-11-12
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多