我们有一个数据库,我们有一个列数据错误:它的当前月份记录实际上是下个月的数据。 e.g。
recordA 2014-12-01 3.5
recordB 2014-12-01 1.5
recordC 2014-12-01 5.5
recordD 2014-12-01 3.5
recordB 2014-11-01 3.8
recordC 2014-11-01 6.7
recordD 2014-11-01 1.1
recordA 2014-10-01 8.5
recordB 2014-10-01 3.5
recordC 2014-10-01 4.4
recordD 2014-10-01 1.5
...
基本上,目前2014-12-01数据实际上是2015-01-01数据,2014-11-01数据实际上是2014-12-01数据,我怎么能更新这些记录与上个月的记录?一个特定记录也可能有一些缺失的月份。例如。 recordA 2014-11-01缺席,在这种情况下要么创建新的2014-11-01记录2014-10-11记录,要么就是不要更新。
对我来说这是一个非常复杂的sql,请帮助。
答案 0 :(得分:1)
将DateAdd
函数与recordA上的where条件一起使用。
Update Table_Name_Here set DateField_Name_Here = DateAdd(month, 1, DateField_Name_Here) Where RecordTypeField_Name_Here = 'recordA';
如果表中有其他列的数据映射到正确的日期,请尝试以下步骤:
将recordA记录放入临时表中,比如#CorrectHelpTable。确保从源表中绘制主键,因为我们将使用它来映射到新值。
我在上面的临时表中进行了上述更新。
更新源表,比较存在和通过主键连接的日期,使用#CorrectHelpTable中的值更新第三列(表示3.5等)。
对于源表上不存在的日期,请插入尽可能多的记录。在这种情况下,您可能必须决定要为其他列提供的值。