Sql 为每个设备选择最新记录

Sql 为每个设备选择最新记录,sql,subquery,Sql,Subquery,我有一个sensortable,它有三个字段 设备ID、时间戳、温度 我经常从传感器设备插入记录。因此,对于具有相同时间戳的同一设备ID,可能存在多个温度读数 我的要求是编写一个SELECT语句,它将为最近的每个设备检索一条记录。例如,如果有5台设备记录的温度读数,我只希望输出中有5条记录,每条记录都需要记录该特定设备的最新温度读数 我做了一些研究,并使用了下面的查询 select s1.g_device as DEVICE, s1.c_temperature as T

我有一个sensortable,它有三个字段

设备ID、时间戳、温度

我经常从传感器设备插入记录。因此,对于具有相同时间戳的同一设备ID,可能存在多个温度读数

我的要求是编写一个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;
但是,如果设备在同一时间戳上具有不同的温度读数,则此查询不起作用

谢谢,
Murali

假设您使用的是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;

当设备具有相同的时间戳时,查询将如何分配行号?如果是相同的时间戳,则无关紧要,因为即使您无法决定使用哪一个。如果时间戳对于您的数据不够准确,您应该使用另一种方法来保证您得到的是最新的时间戳。因此,在SQL Server中,我认为如果它们具有相同的时间戳,则只需要任意一行。嗨,我没有使用SQL Server。这是SAP HANA数据库。谢谢。我对SQL进行了如下修改,现在它可以工作了。从传感器表中选择*按设备ID顺序按时间戳描述N从传感器表中选择*按设备ID、温度、行数超额分配N=1;