我想删除给定间隔的每个时间段内除最新行之外的所有行。例如,假设我每天都有一行两年,我选择月份作为给定的间隔。删除后,我将以24行结束,这是两年中每个月的最后一天。重要的是它的日历是对齐的,而不是相对于当前日期。
我该怎么做?
答案 0 :(得分:2)
这应该可以解决问题:
DELETE DataToBeDeleted
FROM
(
SELECT
SomeDate,
ROW_NUMBER() OVER (PARTITION BY Year(SomeDate), Month(SomeDate)
ORDER BY SomeDate DESC) AS RankFromBack
FROM DayData
) DataToBeDeleted
WHERE DataToBeDeleted.RankFromBack > 1;
对于非月份期间,您需要调整分区和排序,以确保您对要保留的数据进行相应排名。
请注意,这也依赖于从单个表的投影中删除。