2015-11-23 36 views
4

我想從表中另一個(可爲空)的列中刪除不在MIN和MAX之間的記錄。從另一列中刪除不在最小和最大日期之間的行

這裏是SQL小提琴建設模式和樣本數據:

http://www.sqlfiddle.com/#!3/14686

我一直在嘗試這樣的事情(這ofcourse不工作):

DELETE FROM MeterReadings 
WHERE ScheduledReadingDate NOT BETWEEN MIN(ActualReadingDate) and MAX(ActualReadingDate) 
GROUP BY MeterId 

怎麼辦我做到了?

+0

http://stackoverflow.com/questions/17539145/is-it-possible從同一個sql語句中的多個表中刪除 – brykneval

回答

2

可以先選中最小和最大的日期,然後做比較:

with cte as(select *, 
        min(ActualReadingDate) over(partition by meterid) as MinDate, 
        max(ActualReadingDate) over(partition by meterid) as MaxDate    
      from meterreadings) 
delete from cte 
where ScheduledReadingDate not between MinDate and MaxDate 
+0

太棒了!正是我所期待的。 :) –

1

試試這個

;WITH cte 
    AS (SELECT Min(ActualReadingDate) m_ActualReadingDate, 
       Max(ActualReadingDate) ma_ActualReadingDate, 
       MeterId 
     FROM MeterReadings 
     GROUP BY MeterId) 
DELETE M 
FROM MeterReadings M 
WHERE EXISTS (SELECT 1 
       FROM cte c 
       WHERE c.MeterId = m.MeterId 
         AND m.ScheduledReadingDate < m_ActualReadingDate 
         AND m.ScheduledReadingDate > ma_ActualReadingDate) 
+0

不會刪除任何內容。我收到消息:(0行受影響) –

相關問題