2016-09-15 39 views
0

我有一个表具有以下列... 节点,DATE_TIME,市场,价格SQL消除重复,没有ID

我想删除所有,但1个记录每个节点,日期时间。

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

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

注 - 没有针对此表

+3

您正在使用哪些DBMS?答案将取决于数据库供应商。 –

+1

显示您的表格架构 – scaisEdge

回答

0

这里是一个简单的sql服务器方法,它在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 
+0

谢谢,该行编号正是我所需要的。刚刚在测试表上测试过,并且即将开始运行在全表上 –

+0

很高兴为您提供帮助,未来如果您可以使用您正在使用的数据库服务器标记您的问题, sql-server,oracle等,你会得到更多人更快的响应。干杯。 – Matt

1

这里有步骤,这些步骤,而解决方法不是简单的一个命令将在任何关系型数据库的工作没有ID:

  1. 创建新表看起来只是就像一个你已经有
  2. 插入你的计算机组通过查询数据,以新创建的表
  3. 删除旧表
  4. 重命名新表到t他的名字是旧有的

只要记住发生了锁定,并且需要一些维护时间来执行此操作。

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