Select 查询以获取两列中的唯一单元格
Select Query to Get Unique Cells in Two Columns
我有一个 SQL 服务器数据库,用于记录天气设备传感器数据。
table 看起来像这样:
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
在 return 中,查询应该 return 以下内容:
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 列中的值应该是唯一的(按行)。
如果我不够清楚,请见谅。
如果您不想按照您想要的结果对 Value
求和,那么您只想对每个 "DeviceId + SensorId" 组取一个 "arbitrary" 行:
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
这 returns 每组 ID 最高的行。如果您想要不同的结果,您需要更改 ORDER BY ID DESC
。演示:http://sqlfiddle.com/#!6/8e31b/2/0(你的结果)
我有一个 SQL 服务器数据库,用于记录天气设备传感器数据。
table 看起来像这样:
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
在 return 中,查询应该 return 以下内容:
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 列中的值应该是唯一的(按行)。
如果我不够清楚,请见谅。
如果您不想按照您想要的结果对 Value
求和,那么您只想对每个 "DeviceId + SensorId" 组取一个 "arbitrary" 行:
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
这 returns 每组 ID 最高的行。如果您想要不同的结果,您需要更改 ORDER BY ID DESC
。演示:http://sqlfiddle.com/#!6/8e31b/2/0(你的结果)