SELECT每个设备的最新记录

时间:2016-07-14 17:04:04

标签: sql subquery

我有一个有三个领域的敏感。

DeviceID,时间戳,温度。

我不断地从传感器设备插入记录。因此,对于具有相同时间戳的相同deviceID,可能有多个温度读数。

我的要求是编写一个SELECT语句,它将为每个最近的设备检索一条记录。例如,如果从5个设备记录温度读数,我只想在输出中记录5个记录,每个记录需要该特定设备的最新温度读数。

我做了一些研究并使用了以下查询。

 select 
     s1.g_device as DEVICE, 
     s1.c_temperature as TEMP,
 from sensortable s1
 inner join (
       SELECT  g_device, 
             max(g_created) as mts
       FROM sensortable
       GROUP BY g_device ) s2 
       on s2.g_device = s1.g_device and 
          s1.g_created = s2.mts;

但是,如果设备在同一时间戳上具有不同的温度读数,则此查询不起作用。

谢谢, 穆拉利

1 个答案:

答案 0 :(得分:3)

假设您使用的是SQL Server

WITH TT AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY DeviceID ORDER BY timestamp DESC) AS N
    FROM sensortable 
)
SELECT *
FROM TT
WHERE N = 1;