微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HSQLDB使用先前的非空值更新空条目

如何解决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 举报,一经查实,本站将立刻删除。