2014-02-22 64 views
1

我想删除给定间隔内每个时间段内除最新内容以外的所有行。例如,假设我每两天都有一排,我选择月份作为给定的时间间隔。删除后,我会以24行结束,这两年是每个月的最后一天。重要的是日历对齐,而不是相对于当前日期。每个时间段删除除最新一行以外的所有内容

我该怎么做?

+2

您能否提供表结构和预期的输出示例? – StuartLC

回答

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; 

SqlFiddle here

对于一个月相比其他时段,则需要调整划分和排序,以确保你的排名,你要保留的数据因此。

请注意,这也依赖于从单个表中的投影中删除。

相关问题