【问题标题】:Delete Rows not between Min and Max dates from another column从另一列中删除不在 Min 和 Max 日期之间的行
【发布时间】:2015-11-23 10:42:26
【问题描述】:

我想从表中的另一个(可为空)列中删除不在 MIN 和 MAX 之间的记录。

这是构建模式和示例数据的 sql fiddle:

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

我一直在尝试这样的事情(当然行不通):

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

我如何做到这一点?

【问题讨论】:

标签: sql-server sql-server-2008


【解决方案1】:

您可以先选择最小和最大日期,然后进行比较:

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

【讨论】:

  • 太棒了!正是我想要的。 :)
【解决方案2】:

试试这个

;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 行受影响)
猜你喜欢
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 2017-06-10
  • 2016-01-11
  • 1970-01-01
  • 2019-05-12
  • 2014-08-08
  • 2014-09-06
相关资源
最近更新 更多