如何解决HSQLDB使用先前的非空值更新空条目
如何从上一个非空行的所有条目中更新空值?
例如:
create table users (
id int primary key,create_date date
);
实际条目
id create_date
2 2018-12-03
3 NULL
4 2018-12-04
5 NULL
6 NULL
更新后的表条目:
id create_date
2 2018-12-03
3 2018-12-03
4 2018-12-04
5 2018-12-04
6 2018-12-04
解决方法
您需要从ID小于当前(更新)行的行中选择CREATE_DATE的MAX值。使用此最大值用NULL值更新行。这很简单,不需要窗口函数。
UPDATE USERS U SET
CREATE_DATE = (SELECT MAX(CREATE_DATE) FROM USERS USUB WHERE USUB.ID < U.ID)
WHERE U.CREATE_DATE IS NULL
以上语句假定日期相对于ID(您的示例)按升序排列。如果不是这种情况,则可以使用此语句为最后一个非空值选择CREATE_DATE。
UPDATE USERS U SET
CREATE_DATE = (SELECT CREATE_DATE FROM USERS USUB WHERE USUB.ID < U.ID AND USUB.CREATE_DATE IS NOT NULL ORDER BY USUB.ID DESC LIMIT 1)
WHERE U.CREATE_DATE IS NULL
,
在SQL标准中,您可以使用TextServiceFramework\libtf\PropertySheet.props
:
lag(ignore nulls)
并非所有数据库都支持该选项。因此,另一种方法是根据直到该行的非select id,coalesce(create_date,lag(create_date ignore nulls) over (order by id)) as imputed_create_date
from t;
值的数量为每行分配一个分组。然后,可以将非NULL
值分布到整个组:
NULL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。