删除超过13个月的数据而不删除部分月份数据

时间:2017-10-22 12:33:55

标签: sql sql-server

需要保留13个月滚动数据,删除超过13个月的数据,保留完整数月的数据。不应该在保持滚动13个月的同时丢弃部分月份数据。因此,如果我的删除日期不是1,我会保留整个月的数据。需要帮助为此

编写SQL查询

1 个答案:

答案 0 :(得分:0)

delete语句在MySQL中看起来像这样(因为问题最初是标记的):

delete from t
    where datecol < date_add(date_add(curdate(), interval (1 - day(curdate())) day), interval -13 month);

在SQL Server中,它看起来像:

delete from t
    where datecol < dateadd(month, -13,
                            dateadd(day, 1 - day(getdate()),
                                    cast(getdate() as date)
                                   )
                           )

当然,在测试之前复制数据。

两点需要注意:

  1. 我非常不愿意删除数据。将旧数据留在表中会有什么危害。
  2. 如果您确实需要一次删除一个月的数据,那么您应该查看分区并删除分区。删除分区效率更高。