选择“查询”以在两列中获取唯一单元格

时间:2015-03-16 13:13:52

标签: sql database select sql-server-2012

我有一个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应该是唯一的(行方式)。

如果我不够清楚,请道歉。

1 个答案:

答案 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(您的结果)