我有一个SQL Server数据库,用于记录天气设备传感器数据。
表格如下:
Id DeviceId SensorId Value
1 1 1 42
2 1 1 3
3 1 2 30
4 2 2 0
5 2 1 1
6 3 1 26
7 3 1 23
8 3 2 1
作为回报,查询应返回以下内容:
Id DeviceId SensorId Value
2 1 1 3
3 1 2 30
4 2 2 0
5 2 1 1
7 3 1 23
8 3 2 1
对于每个设备,传感器应该是唯一的。即列中的值DeviceId和SensorId应该是唯一的(行方式)。
如果我不够清楚,请道歉。
答案 0 :(得分:2)
如果您不想将Value
作为您想要的结果建议,那么您只想采取随意的#34;每一行" DeviceId + SensorId" -group:
WITH CTE AS
(
SELECT Id, DeviceId, SensorId, Value,
RN = ROW_NUMBER() OVER (PARTITION BY DeviceId, SensorId ORDER BY ID DESC)
FROM dbo.TableName
)
SELECT Id, DeviceId, SensorId, Value
FROM CTE
WHERE RN = 1
ORDER BY ID
这将返回每组ID最高的行。如果您想要不同的结果,则需要更改ORDER BY ID DESC
。演示:http://sqlfiddle.com/#!6/8e31b/2/0(您的结果)