2016-09-15 40 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特有的。