我正在尝试从没有日期字段的6个月以上的表中删除数据。请告诉我。
答案 0 :(得分:6)
没有日期字段,这是不可能的。
但是,如果您有6个月前的备份,则可以删除该备份中的表中的所有数据。
答案 1 :(得分:0)
您可以计算每月生成的数据量的平均值。 * 6将为您提供要保留的行数。 因此,您可以获取当前的最大ID,少于n行。如果您的桌子没有ID,您可以使用这样的人工制品:
SELECT *, n = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
FROM your_table_name
答案 2 :(得分:0)
如果没有日期列,则无法知道哪些行超过六个月。如果键列不是单调递增的值(即,不是简单的整数序列),则这尤其成问题。
但是,如果您拥有数据库的备份,则可能会生成六个月大的备份dB中的行列表,并将其与当前dB中的行进行比较,然后推断出在备份已经完成。你知道剩下的行至少有六个月了。
建议#2
如果行的键列是单调递增的值(例如整数序列,或唯一增加的帐户ID),那么您可以每月(或一周或一天)插入一个特殊的 sentinel 记录,无论如何)中有特殊值,告诉你它是一个标记行(而不是普通数据)。然后,您知道在标记之前插入了具有比标记的键值更低的键字段值的每一行。
然后每个月(周/天/无论如何),找到那些较旧的行并删除它们非常简单。