我有一个有三个领域的敏感。
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;
但是,如果设备在同一时间戳上具有不同的温度读数,则此查询不起作用。
谢谢, 穆拉利
答案 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;