我有一个具有以下结构的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分钟。
答案 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