【发布时间】:2019-03-07 16:44:30
【问题描述】:
我有一堆当前日期为 NULL 的值(即在这些特定日期没有可用数据)。
我将如何将这些值更新到有可用数据的下一个日期?
我目前有一个选择查询,它突出显示日期为空值(或由小于 0 的值定义的错误数据)的所有值:
select * from table1 a
left join table2 b on a.id=b.id and a.date=b.date --joins dates table to main data set
where a.id in (select c.id from table3 c
left join table4 d on c.id=d.id where c.value = 000000) -- sub query identifying sub set of data I want to use as 'id' list
and a.date is not NULL and a.date > '1900-01-01' --a.date not NULL just identifies illegitimate date values that I don't want to see
and (b.value is NULL or b.value < 0) --identifies legitimate values that fall on dates where there are NULL values or false dates
因此,此查询为我提供了来自所选数据集中的所有值,这些值位于具有错误数据或 NULL 值的日期。我在查询中还使用了一些“where”和“and”变量,但希望这能提供一个很好的理解基础。
我想将所有这些值更新到未来不为 NULL 的下一个日期(即具有合法数据)。
只是我在想的一个小例子:update table1 set date = (假设这里会有某种选择子查询来定义下一个不为 NULL 的日期值 )。
需要考虑的另一个注意事项:值不为 NULL 的下一个日期是动态的 - 它可能是给定日期的 2 天,但也可能是 2 年。
【问题讨论】:
-
发布一些示例数据和预期结果以及您解决问题的尝试将非常有帮助。在这里。
-
您说您不能发布您的实际查询,但您可以发布一个虚拟数据集,其中包含与源数据的数据类型相匹配的假列名以及您拥有的查询的简单版本,已调整为使用虚拟模式。 SO 用户愿意在他们自己的时间免费为您提供帮助,所以请尽量提供帮助
-
此外,还不清楚您在这里真正想要实现什么。 我将如何将这些值更新到有可用数据的下一个日期。 究竟是什么意思?源数据和期望的输出确实有助于澄清这一点。
-
您可以修改查询以将机密信息替换为虚拟变量。这个问题在目前的状态下有点难以理解。您想根据信息更改日期(您的查询显示“update table1 set ex_date =”)还是复制其他日期的信息?
-
感谢大家这么快回复,明天我会添加更多上下文 - 抱歉,在一天结束时匆忙写了这篇文章 - 谢谢你到目前为止的帮助
标签: sql sql-server