【问题标题】:Select Query to Get Unique Cells in Two Columns选择查询以获取两列中的唯一单元格
【发布时间】:2015-03-16 13:13:52
【问题描述】:

我有一个 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 列中的值应该是唯一的(按行)。

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

【问题讨论】:

  • 你如何决定删除哪些行?
  • 正如 Tim 的回答,我需要唯一的“DeviceId + SensorId”组。哇,我的问题似乎很模糊,我想删除它。即使我确实得到了答案。

标签: sql database select sql-server-2012


【解决方案1】:

如果您不想按照您想要的结果建议对 Value 求和,那么您只想对每个“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(你的结果)

【讨论】:

  • 太棒了!而不是PARTITION BY DeviceId, SensorId ORDER BY ID DESC,我在做PARTITION BY DeviceId ORDER BY ID DESC。我被困了好几个小时!谢谢:D
猜你喜欢
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多