在指定时间点选择不同的测量组

时间:2012-10-16 17:43:05

标签: sql sql-server performance analytics

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

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

在此表中,日志记录基础结构会记录许多设备的数据。设备标识符的范围从例如。这意味着列“标识符”的值为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分钟。

1 个答案:

答案 0 :(得分: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