【问题标题】: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)