1

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

|标识 | 传感器 | 柜台 1 | 柜台2 | 时间戳
  1 5 100 200 上午 10:00
  2 5 125 210 上午 10:01
...
  60 5 1000 800 上午 11:00

我有数千个这样的传感器及时发送其计数器值的快照。我需要做的是,给定一个时间段,比如上午 10 点到 11 点之间,将记录之间的增量映射到图表。Delta 总是取到之前的记录。
获取连续记录之间的增量的 SQL 查询是什么?
我的第二个问题是,存储此类自引用数据的良好表设计是什么。可能作为一个链表,每条记录都指向前一条记录?

4

1 回答 1

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应该会给你合理的表现。

于 2013-04-24T21:15:54.327 回答