SQL消除没有ID的重复项

时间:2016-09-15 20:08:24

标签: sql sql-server duplicates

我有一个包含以下列的表格... 节点,日期_时间,市场,价格

我想删除每个节点,日期时间以外的所有记录。

SELECT Node, Date_Time, MAX(Price) 
FROM Hourly_Data
Group BY Node, Date_Time

这得到了我希望看到的结果,但无法弄清楚如何删除其他记录。

注意 - 此表没有ID

2 个答案:

答案 0 :(得分:1)

以下步骤相当于一个简单的单命令,它可以在任何关系数据库中使用:

  1. 创建一个看起来就像你已经拥有的新表
  2. 将group-by查询计算的数据插入新创建的表
  3. 放下旧桌子
  4. 将新表重命名为旧表的名称
  5. 请记住锁定发生,您需要一些维护时间来执行此操作。

    有更简单的方法可以实现这一点,但它们是特定于DBMS的。

答案 1 :(得分:0)

这是一个简单的sql-server方法,它在cte中创建一个行号并从中删除。我相信这种方法也适用于大多数支持窗口函数和公用表表达式的RDBMS。

;WITH cte AS (
    SELECT
       *
       ,RowNum = ROW_NUMBER() OVER (PARTITION BY Node, Date_Time ORDER BY Price DESC)
    FROM
       Hourly_Data
)

DELETE
FROM
    cte
WHERE
    RowNum > 1
相关问题