sql查询来汇总表中的增量

时间:2013-04-24 21:07:45

标签: mysql sql database-design linked-list

我有传入的传感器数据存储在表格中。传感器的每个记录都有很少的“计数器”列。计数器只不过是时间的快照。示例记录如下所示。

|id    | sensor  | counter 1  | counter 2  | timestamp
  1        5          100         200        10:00 AM
  2        5          125         210        10:01 AM
...
  60       5          1000        800        11:00 AM

我有数千个此类传感器及时发送其计数器值的快照。我需要做的是,假设上午10点到11点之间的时间段,将记录之间的 delta 映射到图表。达美总是被带到以前的记录 在连续记录之间获取delta的SQL查询是什么? 我的第二个问题是,什么是一个好的表设计来存储这种自我引用的数据。可能是一个链表,每条记录都指向前一条记录?

1 个答案:

答案 0 :(得分:1)

通用SQL是:

select t.*,
       (select counter1 from t t2 where t2.sensor = t.sensor and t2.timestamp < t.timestamp
        order by timestamp desc
        limit 1
       ) prevCounter1
from t

limit 1取决于数据库。它可能是top 1(SQL Server,Sybase)或where rownum = 1(Oracle)。

您需要为每个计数器执行此操作。

如果您使用的是Postgres,Oracle或SQL Server 2012,则可以使用lag()

select t.*,
       lag(counter1) over (partition by sensor order by timestamp) as prevCounter1
from t

在MySQL中,如果你输入prevID,你将是最好的。如果没有,sensor, timestamp上的索引应该给你合理的表现。