2

我有一个具有以下结构的 SQL 表:

CREATE TABLE dataLog (
tstamp datetime NOT NULL, 
identifier smallint NOT NULL, 
payload binary(46) NOT NULL, 
PRIMARY KEY (tstamp, identifier));

在此表中,日志基础设施记录了许多设备的数据。设备标识符的范围从例如。1 到 125。这意味着“标识符”列的值介于 1-125 之间。有效负载列保存来自每个设备的二进制数据(日志信息、温度等)。 tstamp 列保存当前时间信息。

如何构建查询以获取给定时间点内每个设备的“快照”信息。例如,我想知道每个标识符(125)的有效负载列值是多少。2012-06-12 12:00:00。表中的数据是在设备发送时写入的,这就是为什么数据不是上面给出的确切时间戳,而是例如。2个设备在2012-06-12 11:59:59发送数据,10个设备在2012-06-12 11:15:30等。数据应该及时向后检测。

预期结果:125 行,每个标识符、每个测量的时间戳和每个标识符的有效负载值。

需要数据来绘制例如。在给定时间戳下从 1 到 125 的所有设备的温度图,然后遍历例如中的数据。5分钟步。

4

1 回答 1

0

通过“快照”,我假设您是指该时间之前每个标识符的最新记录。这是一种使用排名函数的方法:

select dl.*
from (select dl.*,
             row_number() over (partition by identifier order by tstamp desc) as seqnum
      from DataLog dl
      where tstamp <= @YOURTIMESTAMPHERE
     ) dl
where seqnum = 1
于 2012-10-16T17:50:32.197 回答